首页 > Python基础教程 >
-
C#教程之SlickSafe.NET 开源权限框架开发指南
前言:本文适用于快速搭建权限系统的用户,尤其适用于希望有良好定义的权限模型建立;系统解决方案是在基于角色访问控制(RBAC)策略基础上的权限访问模型实现,主要完成了后台权限验证逻辑和前端权限数据验证的功能。
1. 权限访问模型
1). 权限访问控制基本概念
- 角色:是用户集合,表示同一类型的用户集合,可以拥有相同的功能操作。如:“部门经理”,表示公司下各个部门经理的用户的集合,通常他们有一组相同的权限。
- 用户:指登录系统进行操作的软件用户,由用户名或者登录名来进行标识,每个用户分配有操作列表。
- 资源:指隶属于整个软件系统的各个元素集合的总称,常见类型有:系统,模块,菜单,窗体,按钮,字段和方法等。
- 权限:角色或用户有无权利对某个资源项进行操作的专业术语。
- 授权:对角色或用户进行授权操作,表示该角色或用户是否具备权限对某一个资源项的操作。
- 许可类型:有允许和拒绝两种。“允许”表示具备权限,“拒绝”表示没有权限。
2). 权限运算模型
a) 权限所属的两种类型:继承和自有
- 继承权限:来自于用户属于的角色,通常一个用户有可能属于多个角色,这样就可以继承了多个角色的权限,在管理员操作时,通过角色授权比较方便地实现了用户权限的批量授权。
- 自有权限:来自用户直接授权的权限,不属于继承权限,一般由管理员对用户进行某一个资源的特别授权。
b) 权限许可的两种类型:允许和拒绝
- 允许:权限许可取值为允许,表示该用户具备权限访问或操作某一项资源。
- 拒绝:权限许可取值为拒绝,表示该用户不具备权限访问或操作某一项资源。
c) 权限计算
- 自有权限 U 继承权限:用户默认取继承权限,当自有权限有值后,则直接优先取自有权限;
- 拒绝权限 U 允许权限:如果用户对一个资源项同时有允许和拒绝权限存在,则拒绝权限大于允许权限;
举例说明:
在上述授权过程中,用户继承权限和拒绝权限要参与运算。对于资源数据“新增”项来说:它有来自自有权限的“允许”操作,同时又有来自继承权限的“拒绝”操作,则权限运算后,该用户对资源数据“新增”项来说具备“允许”的权限。
3). 授权的两种方式:角色授权和用户授权并存
角色授权:管理员通过角色完成资源项的权限授权,这是管理员优先采用的授权方式,是为了提前批量化的进行资源权限的授权操作;
用户授权:管理员通过用户完成资源项的权限授权,这是管理员为了对用户权限进行微调的操作,一般根据用户先查询权限列表,再根据权限操作(允许和拒绝)来对资源进行授权。
2. 数据库设计
1). 基本数据表
2). 存储过程实现逻辑
角色权限列表读取,用户权限列表读取,角色授权保存和用户授权保存操作都有对应的存储过程,其中授权操作时候,需要进行权限运算。
3. 前端界面操作说明
1) 角色授权
左侧为角色列表,当选定一条角色记录时,右侧的权限数据列表就会出现,然后就可以对资源列表数据进行授权操作,每一条角色记录进行授权后,需要进行保存操作。当要清空某个角色的权限记录时,把该角色的资源项的权限许可列表的复选框清空,然后再进行保存操作。
2) 用户授权
左侧为用户列表,当选定一条用户记录时,该用户的权限列表就会显示,然后进行权限许可授权,再进行保存操作就可以。用户权限授权需要注意的是:有来自角色的继承权限,也有用户自身的自有权限,在授权操作时候,需要理解权限运算模型。
3) 主界面显示
用户登录系统后,左侧导航菜单会根据用户拥有的资源列表数据进行菜单项展现,当操作具体页面的数据记录时,页面顶部的操作按钮会根据用户是否具备允许操作的权限来进行展现。其中如图所示:黄色按钮标识该用户不具备该功能操作。
4. 权限开发框架的优势
1). 基于SlickOne 快速开发框架,代码重用度较高;
2). 用户登录,权限校验的原创设计思想持续改进和优化;
参考早期博文: http://blog.csdn.net/besley/article/details/8516894
3). 良好定义的权限模型,顺利解决了用户权限继承和自有两种方式的计算;
4). 前端界面权限控制功能的编程框架实现,较为轻松地实现了数据和功能分离的原则,便于开发人员二次开发和功能完善;
5). 多数据库的支持,默认SQLSERVER,支持Oracle, MySQL, KingBase(人大金仓) 等数据库;
6). 专业架构设计人员产品维护,始终保持良好架构设计和代码重构。
5. 商业授权和技术支持
SlickSafe 开源权限开发框架受软件著作权保护,我们提供商业授权服务,产品在线培训和技术支持服务,欢迎企业用户咨询了解。
6. 交流和建议
开源权限开发框架可以使得用户快速搭建用于企业软件的权限模型,而且在编程代码实践环节,保持不断完善和改进,希望有需求的用户或者开发人员持续推动项目。