通用独立的权限管理系统
目录
一概述
1.背景
一般系统都会涉及到权限控制而且权限控件的原理基本相同,为了让开发团队把更多 的时间精力投入到业务中去,固有必要把权限控制提取出来以达到重复利用的目的,不用每个系统都去重复的开发权限管理模块,只需要经过简单的配置就可以把现有的权限管理拿来使用,这样节省了很多开发时间。此权限管理是独立于业务系统的,只需要经过简单的配置就可以利用起来,也可以很容易把代码提取出来融入到业务系统中去。
2.开发环境
本系统是由VS2017,.NET Framework 4.6.1开发的,其中使用Autofac.4.8进行解耦,数据库使用的是sqlserver2012,前端UI使用的是AceAdmin,图标全是字体图标,树形控件用的是bootstrap-treeview,还用了一些其它的三方控件,都是些常用且易上手的,项目结构清析代码注释详细易读易懂。
3.适用人群
本系统是一个权限管理的成品系统,一般需要结合其它业务系统进行使用,一般适合个人开发者研究学习,也适合个人,团队,工作室,公司等拿来对接现有的或待开发的业务系统,或者进行二次开发,以达到缩短开发周期的目的。
二项目结构
1.项目结构预览
2.项目说明
Rights.API |
通过API的方式验证权限等 |
Rights.Operate |
可以通过引用此程序集验证权限等,Rights.API就是引用此程序集来实现的 |
Rights.Basic |
常量,接口,模型等公共逻辑 |
Rights.BLL |
业务逻辑 |
Rights.Control |
控制器 |
Rights.DAL |
数据访问层 |
Rights.Entity |
实体 |
Rights.IBLL |
业务逻辑接口 |
Rights.IDAL |
数据访问层接口 |
Rights.Tools |
常用的工具 |
Rights.UI |
UI层 |
三表说明
1.表功能
R_Member |
用于分配权限的用户 |
R_MemberMenu |
用户与菜单的关系 |
R_MemberRights |
用户与权限的关系 |
R_MemberRole |
用户与角色 |
R_Menu |
菜单 |
R_Rights |
权限 |
R_Role |
角色 |
R_RoleMenu |
角色与菜单的关系 |
R_RoleRights |
角色与权限的关系 |
R_SiteLog |
日志 |
R_User |
登录权限管理系统的账户 |
2.表关系
四原理
1.操作原理
2.权限控制原理
五使用说明
1.用户
- 可以录入用户也可以通过模板导入用户。
- 用户Id与用户名是必须的,其它信息都是可空的,用户Id是不能重复的。
- 部门,职位,分组标识,只是方便查询数据用的,与权限逻辑无关。分组标识是预留字段,只要有利归类查询数据可根据需要自行放一个值在这个字段。
- 用户的删除是逻辑删除。
- 可以为用户分配角色,菜单,为用户直接分配权限(包含权限,排除权限)
- 为什么要为用户直接分配权限:
- 用户通过“销售”这个角色拥有了20权限,但只想给某个销售19个权限,这时可以通过为这个销售直接排除一个权限就可以了,这个销售还是拥有“销售”角色的。
- 用户通过“文职人员”角色拥有了50权限,但有一个用户需要在“文职人员”角色基本上再要一个额外的权限,这时可以通过为个用户直接分配一个权限就可以了,不用通过再加一个角色的方式来分配。
2.菜单
- 菜单添加会添加到当前选择的菜单下面。
- 菜单的删除是逻辑删除。
- 可以查看拥有当前菜单的用户,包含通过角色拥有的和直接拥有的用户。
3.角色
- 角色添加会添加到当前选择的角色下面。
- 角色的删除是逻辑删除。
- 可以查看拥有当前角色的用户。
- 角色展现成一棵树只是为了方便查看,一般父节点可理解为分组或分类,叶子节点理解为真正的角色,分配角色时一般只选择叶子节点就可以了,选择节点时父节点不会联动的。例如在分配角色时如下图:
“管理员”节点理解为一个分组,表示他下面的角色都是管理员,
“Admin”,“督查”两个角色是管理员 。
4.权限
- 权限添加会添加到当前选择的权限下面。
- 权限码不能重复。
- 权限的删除是逻辑删除。
- 可以查看拥有当前权限的用户,包含通过角色拥有此权限的用户和直接拥有权限的用户。
- 可以把权限码生成常量或枚举供验证权限的地方使用,如下图:
- 权限展现成一棵树只是为了方便查看,一般父节点可理解为分组或分类,叶子节点理解为真正的权限,分配权限时一般只选择叶子节点就可以了,选择节点时父节点不会联动的。例如在分配权限时如下图:
“请假管理”理解为权限分组,他下面的3个节点“我要请假”,“我的请假”,“所有请假”就是我们要用的权限。
5.日志
- 日志管理是记录权限管理系统的所有操作记录和异常还有登录。
- 可以删除单条日志,也可以根据查询条件批量删除。
六调用
1.引用Rights.Operate程序集调用
- Rights.Operate程序集是一个独立的程序集,不依赖权限管理模型,业务层,数据访问层。配置好权限数据库的连接就可以了。
- RightsOperate:验证用户是否拥有某个权限,查询用户的所有权限。
- MenuOperate:查询用户拥有的所有菜单,对菜单进行添加,修改,删除。
- MemberOperate:查询用户是否是管理员,对用户进行添加,修改,删除。
2.通过API调用
- 通过接口的方式进行调用,提供的功能与Rights.Operate一致,其实是Rights.API引用了Rights.Operate程序集。配置好权限数据库的连接就可以了。
- RightsController:验证用户是否拥有某个权限,查询用户的所有权限。
- MenuController:查询用户拥有的所有菜单,对菜单进行添加,修改,删除。
- MemberController:查询用户是否是管理员,对用户进行添加,修改,删除。
七总结
此权限管理系统在站在通用的角度开发的,具有简单、易懂、易阅读、易二次开发的特点,能满足大多数系统的权限验证,如果有个别系统在权限验证方面有特殊的业务需求,可在此权限管理系统的基础之上进行二次开发。
成都烈云网络科技有限公司
微信:lieyunwangluo
Q Q:459432433