企业级工作流解决方案(十)--集成Abp和ng-alain--权限系统
权限系统
应用系统离不开权限控制,权限中心不一定能抽象出所有的业务场景,这里定义的权限系统不一定能够满足所有的场景,但应该可以满足多数的业务需求。
Abp的zero项目也定义了权限相关的表,但里面很多东西是用不到了,而且也不太符合平时的使用习惯,直接用他登录控制这一块内容,性能也会存在很大的问题。
数据库关系图

说明
Abp支持多租户,也是我认为最大的亮点之一,所有的数据库表都有TenantId字段,相应的,领域实体也实现了IMayHaveTenant接口
SEC_Dept(部门)为一棵树,每创建一个租户,自动为租户添加一条根节点记录,以租户名称做为顶级部门名称
SEC_AdminUser(用户),用户名称在整个系统中唯一,没有做租户内唯一,如果是租户内唯一,则在登录界面需要选择租户,部门与用户之间为1:n关系,管理员与角色关系为m:n,Email为邮箱,工作流待办和催办依赖于此字段,如果为空,则不会收到流程邮件。
SEC_Module(模块),模块即为菜单,定义为一棵树,Code定义树的路径,格式为:“父节点Id.子节点Id. 子节点Id.”,拥有父节点访问权限则自动拥有所了下级节点权限,模块与角色(SEC_Role)关系为m:n,中间表为:SEC_ModuleSEC_Role
SEC_Operate(操作),如“新增管理员”、“修改管理员”,Code为操作编码,租户内唯一,模块与操作之间关系为1:n,操作与角色(SEC_Role)之间关系为m:n,操作权限验证需要在前端页面ng-alain中验证,也需要在Abp的Application层进行验证,都是根据操作Code来判断的。
SEC_Role(角色),角色与模块、操作、管理员之间的关系都为m:n,一个管理员登录,可以查询出角色列表,进而关联查询出他能访问的模块集合和操作集合,进而进行菜单的操作权限控制。
前端页面部分截图
部门用户管理

模块操作管理

角色管理

企业级工作流解决方案(十)--集成Abp和ng-alain--权限系统的更多相关文章
- 企业级工作流解决方案(十一)--集成Abp和ng-alain--权限系统服务
		
权限系统主要定义为管理员增删改查权限数据,直接读取数据库,权限系统服务主要定义为供其他系统调用的权限验证接口,定义为两个不同的微服务. 权限系统有一个特点,数据变动比较小,数据量本身并不是很大,访问量 ...
 - 企业级工作流解决方案(十五)--集成Abp和ng-alain--Abp其他改造
		
配置功能增强 Abp定义了各种配置接口,但是没有定义这些配置数据从哪里来,但是管理配置数据对于一个应用程序来说,是必不可少的一件事情. .net的配置数据管理,一般放在Web.config文件或者Ap ...
 - 企业级工作流解决方案(十四)--集成Abp和ng-alain--自动化脚本
		
对于.net方向,做过自动化的,应该没有人不熟悉msbuild吧,非常强大的代码编译工具,.net平台的编译工作都是交给他来完成的,包括.net core的命令,本质上都是调用msbuild来执行的 ...
 - 企业级工作流解决方案(十二)--集成Abp和ng-alain--用户身份认证与权限验证
		
多租户 如果系统需要支持多租户,那么最好事先定义好多租户的存储部署方式,Abp提供了几种方式,根据需要选择,每一个用户身份认证与权限验证都需要完全的隔离 这里设计的权限数据全部存储在缓存中,每个租户单 ...
 - 企业级工作流解决方案(十三)--集成Abp和ng-alain--数据库读写分离
		
说到程序里面数据库管理,无非就是两件事情,一是数据库操作,对于数据库的操作,各种程序语言都有封装,也就是所谓的ORM框架,.net 方向一般用得比较多和就是.net framework和dapper, ...
 - 企业级工作流解决方案(六)--微服务消息处理模型之与Abp集成
		
身份认证传递 对于Abp比较熟悉的朋友应该对他里面的用户身份认证比较熟悉,他是通过实现微软提供的权限认证方式实现的,用户登录身份信息存储在System.Security.Claims.ClaimsPr ...
 - 企业级工作流解决方案(八)--微服务Tcp消息传输模型之服务端处理
		
服务端启动 服务端启动主要做几件事情,1. 从配置文件读取服务配置(主要是服务监听端口和编解码配置),2. 注册编解码器工厂,3. 启动dotnetty监听端口,4. 读取配置文件,解析全局消息处理模 ...
 - 企业级工作流解决方案(九)--微服务Tcp消息传输模型之客户端处理
		
客户端启动 客户端启动主要做三件事情,1. 从配置文件读取服务调用配置,存储到全局对象中.2. 指定客户端编解码器工厂.3. 预连接,即预先建立与服务端的通信Chanel. [DependsOn(ty ...
 - 企业级工作流解决方案(七)--微服务Tcp消息传输模型之消息编解码
		
Tcp消息传输主要参照surging来做的,做了部分裁剪和改动,详细参见:https://github.com/dotnetcore/surging Json-rpc没有定义消息如何传输,因此,Jso ...
 
随机推荐
- C# 向服务器发送信息
			
#region 向服务器发送信息 /// <summary> /// 向服务器发送信息 /// </summary> /// <param name="post ...
 - Java Web核心组件之Servlet的使用介绍
			
Servlet是Java Servlet的简称,称为小程序或服务连接器,用Java编写的服务端程序,主要功能在于交互式地浏览和修改数据,生成动态的Web内容:Servlet运行于支持Java的应用服务 ...
 - 手写Javaweb服务器
			
简单web服务器 回忆socket 创建客服端(在httpClient_1包下) public class Client { public static void main(String[] a ...
 - 感知机vs支持向量机
			
感知机原理:二维空间中找到一条直线可以把所有二元类别分离开,三维或多维空间中,找到一个分离超平面把所有二元类别分离开.而可把所有二元类别分离开的超平面不止一个,哪个是最好的呢?损失函数:所有误分类的点 ...
 - dubbo-高可用-负载均衡配置
			
在集群负载均衡时,Dubbo 提供了多种均衡策略,缺省为 random 随机调用. 负载均衡策略 1.Random LoadBalance随机,按权重设置随机概率.在一个截面上碰撞的概率高,但调用量越 ...
 - hibernate.cfg.xml 配置SQL server,MySQL,Oracle
			
1.连接SQL server <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hiberna ...
 - Spring源码知识概览
			
目录 Spring知识总览 1.1 IOC 1.2 Spring中重要接口概览 Spring知识总览 1.1 IOC IOC是控制反转,是一种思想 DI是依赖注入,是控制翻转的一种实现 Spring的 ...
 - 管理Pod(rc,rs,deployment)
			
1.概述 可以把容器想像成豆荚里的豆子,把一个或多个关系紧密的豆子包在一起就是豆荚(一个Pod).在k8s中我们不会直接操作容器,而是把容器包装成Pod再进行管理. 2.管理Pod a. 使用Repl ...
 - Masking Personal Information
			
Masking Personal Information We are given a personal information string S, which may represent eithe ...
 - 浅谈OpenGL之DSA
			
今天准备写一篇文章简单介绍一下OpenGL4.5引入的一个新的扩展ARB_direct_state_access,这个扩展为OpenGL引入了一个新的特性就是Direct State Acess,下文 ...