在前面两篇随笔《ABP开发框架前后端开发系列---(7)系统审计日志和登录日志的管理》和《ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程》开始介绍了权限管理的内容,其中只是列出了内部的权限系统的审计和登陆信息,以及对Winform界面的整合,本篇随笔继续介绍ABP开发框架的权限控制管理内容,包括用户、角色、机构、权限等方面,以及该框架在Winform方面的应用集成。

1、ABP框架的权限控制管理内容

我们知道,权限管理一般都会涉及到用户、组织机构、角色,以及权限功能等方面的内容,ABP框架的基础内容也是涉及到这几方面的内容,其中它们之间的关系基本上是多对多的关系,它们的关系如下所示。

不过在官网下载的框架里面,包含权限管理这些应用服务层和展示层的内容并不完整,只是简单的包括了用户和角色的基础管理,而且很多权限管理所需要的基础功能并没有提供。

根据ABP框架提供的基础数据库表,我们可以进一步整理权限管理几个重要概念和真实数据库表之间的对应关系,基于这个基础上,我们可以完善整个权限管理模块内容。

上图是ABP基础框架中权限模块里面包含的一些主对象表和中间表,中间表主要用来存储两个对象之间的多对多关系,如角色包含多个用户,用户属于多个机构,机构包含多个角色等等。

2、基于ABP框架的权限管理模块

1)组织机构管理 

组织机构主要就是一个层级的对象关系,一般包含但不限于公司、部门、工作组等的定义,其中组织机构包含用户成员和角色成员的关系,如下界面所示。

组织机构包含的成员可以添加多个人员记录,添加界面如下所示。

添加角色界面如下所示。

 2)角色管理

角色信息没有层级关系,可以通过列表展示。

其中角色包含权限分配和角色成员的维护,如下是角色编辑界面,包含角色基本信息、权限、成员管理等。

角色的权限包含系统可以用的权限,并可以勾选为角色设置所需的功能点,如下界面所示。

用户成员则和机构的用户管理一样,可以指定多个用户。

3)用户管理

用户管理只需要管理用户基本的信息即可,我们如果需要分配角色可以在角色管理里面统一处理。当然,创建用户的时候,也可以ABP框架的收费版本界面一样,为用户指定角色和机构信息。

我这里主要是维护用户信息即可,用户列表界面如下所示。

用户编辑或者查看界面,除了可以看用户基础信息外,可以查看用户包所属的机构(多个),或者所属的角色(多个)

当然可以查看这个用户本身拥有的权限功能点,如下界面所示。

4)权限功能

严格来说,ABP框架并没有统一管理好权限功能点的,它没有任何表来存储这个功能集合,而是通过派生AuthorizationProvider的子类来定义权限功能点,这种需要通过指定AuthorizationProvider的子类的方式创建功能点,需要每次系统模块增加功能点的时候,编码一下,然后增加自己的功能点,如下界面所示。

这种方式可能能够满足大多数的需要,不过我如果需要增量开发,或者动态增加某些功能点的时候,就有点不方便了。

我在这个基础上引入了一个权限功能的表用来存储功能点的,然后提供管理界面来动态维护这些功能点。如下界面所示。

这样我可以动态添加或者批量添加所需要的功能点,并且和整个权限管理模块串联起来,形成一个完整的控制体系。

这些概念主要还是来源于我的Winform开发框架和混合式开发框架里面的控制思路,以及界面展示的处理。

这样我们就可以管理自己的权限功能点,并可以为指定的角色配置相关的控制功能点,如下表所示是角色的权限集合(系统中间表),也就是给角色分配的功能点,依旧是在原来的系统表里面存储。

3、权限控制在业务模块界面中的使用

我们拥有了用户、角色、机构、权限功能以及它们之间的关系后,我们可以按照一个完善的权限系统来创建对应的用户角色权限关系,并通过在客户端对界面权限的判断和服务端对操作权限的判断,实现完整的控制处理。

服务端由ABP框架内置权限进行管理,通过在AppService里面定义好增删改查等权限点,如引用服务层的基类设置了几个权限点的属性。

我们在子类里面指定这些操作的变量即可,如产品应用服务中,我们可以定义CreatePermissionName为 Product/Add 这样的名称,当然也可以自定义。

然后每次在Action中调用相应的检查即可,如下是对创建的判断检查。

或者更新操作的权限检查

如果对于导入、导出等其他权限,我们则可以通过调用

void CheckPermission(string permissionName);

来进行自己自定义权限名称的判断。

在客户端,我们登录成功后,获取用户的权限集合,然后在客户端进行判断即可进行权限的控制管理,可以控制菜单、按钮等界面元素,如下是整合了权限控制的产品信息管理界面。

分页列表展示界面的控制代码如下所示。

编辑或者查看界面的控制代码如下所示

这样我们 就可以整合了权限到业务管理模块里面,实现对菜单、按钮等元素的权限控制了。

首先在权限管理系统模块里面为用户角色添加对应的产品管理权限点。

产品信息界面展示如下所示。

如果在权限模块的角色里面取消对应的功能点,那么产品管理功能不可用。

转载于:https://www.cnblogs.com/wuhuacong/p/11065811.html

ABP开发框架前后端开发系列---(9)ABP框架的权限控制管理相关推荐

  1. ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程

    在前面随笔介绍的<ABP开发框架前后端开发系列---(7)系统审计日志和登录日志的管理>里面,介绍了如何改进和完善审计日志和登录日志的应用服务端和Winform客户端,由于篇幅限制,没有进 ...

  2. ABP开发框架前后端开发系列——框架的总体介绍

    ABP开发框架前后端开发系列--框架的总体介绍 ABP是ASP.NET Boilerplate的简称,ABP是一个开源且文档友好的应用程序框架. ABP不仅仅是一个框架,它还提供了一个最徍实践的基于领 ...

  3. ABP开发框架前后端开发系列---(7)系统审计日志和登录日志的管理

    我们了解ABP框架内部自动记录审计日志和登录日志的,但是这些信息只是在相关的内部接口里面进行记录,并没有一个管理界面供我们了解,但是其系统数据库记录了这些数据信息,我们可以为它们设计一个查看和导出这些 ...

  4. winform前后端框架_ABP开发框架前后端开发系列(1)框架的总体介绍

    ABP是ASP.NET Boilerplate的简称,ABP是一个开源且文档友好的应用程序框架.ABP不仅仅是一个框架,它还提供了一个最徍实践的基于领域驱动设计(DDD)的体系结构模型.学习使用ABP ...

  5. 这没啥挑的,全新java前后端开发需掌握的框架及技术

    一.Java开发 1.J2EE架构及主流框架,spring4.spring boot.spring MVC.spring Security.spring cloud.struct2.hibernate ...

  6. 萌新一手包App前后端开发日记(一)

    从事Android移动端也有些日子了,还记得一开始选择这份工作,是憧憬着有朝一日能让亲朋好友用上自己开发的软件,但日子久了才发现,并不是所有的公司,所有的项目的适用群体都是"亲朋好友&quo ...

  7. 3分钟搞懂前后端开发的区别

    上周末见了好多开发的年轻朋友,问了我一个问题:"前后端的区别和要求是什么?"分不清前后端开发的区别和要求,一种是因为前后端都了解,号称"全栈工程师",但又什么都 ...

  8. .net core webapi 前后端开发分离后的配置和部署

    背景:现在越来越多的企业都采用了在开发上前后端分离,前后端开发上的分离有很多种,那么今天,我来分享一下项目中得的前后端分离. B/S  Saas 项目:(这个项目可以理解成个人中心,当然不止这么点功能 ...

  9. uniapp 如何给搜索框设值_uni-app搜索功能前后端开发(页面)

    uni-app搜索功能前后端开发(页面) 博客说明文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 借助的插件地址 展示 前端是使用vue, ...

最新文章

  1. oracle10安装网络需求警告,安装oracle10出现的问题,求解!!!!!(在线等)
  2. JS 设计模式四 -- 模块模式
  3. (66)全局句柄表,遍历全局句柄表
  4. 图像-摄像头驱动流程
  5. 图片中的Build 2016
  6. excel的mysql语言,Mysql中文乱码及导出sql语句和Excel的相关解决方法
  7. 自动化集成:Pipeline整合Docker容器
  8. ES6/03/函数的定义方式和调用方式,函数内的this指向,改变函数中this指向的三个方法(call(),apply(),bind())
  9. VBA实战技巧精粹010:如何快速选定工作表及Option Base 1
  10. 灵格斯怎么屏幕取词_灵格斯屏幕取词翻译插件
  11. Python案例实操1-网络爬虫
  12. 数据库架构设计——索引结构设计
  13. 三丰三坐标编程基本步骤_贴片机编程教程,编程步骤,编程怎么编
  14. alanwang[GDOU] 直接插入排序法简单演示
  15. android app连接打印机程序,Android App新增打印机支持 手机打印就是爽
  16. 力扣 417. 太平洋大西洋水流问题
  17. 裴蜀定理、拓展欧几里得及其证明
  18. 俄勒冈大学计算机科学专业,俄勒冈大学计算机与信息科学详解 热门专业还等什么...
  19. HAVING 子句的力量 和 HAVING 子句又回来了
  20. 用自己的祖源成分数据与其他祖源成分数据做对比

热门文章

  1. 【Python CheckiO 题解】Largest Rectangle in a Histogram
  2. java 一元线性回归_一元线性回归的java实现
  3. 【Python学习】 - sklearn - 用于生成数据的make_blobs模块
  4. 【CodeForces - 1131F 】Asya And Kittens(并查集,思维)
  5. 【HDU - 5605】 geometry(水,数学题,推公式)
  6. Apollo自动驾驶入门课程第④讲 — 感知(上)
  7. java list遍历添加元素_java遍历List过程中添加和删除元素的问题
  8. mysql瓶颈分析_网站瓶颈分析—MYSQL性能分析
  9. 2008r装mysql_mysql5.7.17在win2008R2的64位系统安装与配置实例
  10. java连接mysql数据库C3P0入门