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 开源权限开发框架受软件著作权保护,我们提供商业授权服务,产品在线培训和技术支持服务,欢迎企业用户咨询了解。
联系方式:
QQ: 47743901(过河卒子)
EMail: sales@ruochisoft.com
6. 交流和建议
开源权限开发框架可以使得用户快速搭建用于企业软件的权限模型,而且在编程代码实践环节,保持不断完善和改进,希望有需求的用户或者开发人员持续推动项目。
开源项目地址:
http://github.com/besley/slicksafe
QQ交流群:
331928998
DEMO演示:
http://demo.slickflow.com/ssweb/
用户密码: admin/123456, jack/123456
SlickSafe.NET 开源权限框架开发指南的更多相关文章
- ASP.NET Aries 开源开发框架:开发指南(一)
前言: 上周开源了Aries开发框架后,好多朋友都Download了源码,在运行过程里,有一些共性的问题会问到. 所以本篇打算写一下简单的开发指南,照顾一下不是太看的懂源码的同学,同时也会讲解一下框架 ...
- Apache Shiro 开源权限框架
在 Web 项目中应用 Apache Shiro 开源权限框架 Apache Shiro 是功能强大并且容易集成的开源权限框架,它能够完成认证.授权.加密.会话管理等功能.认证和授权为权限控制的核心, ...
- Jdon框架开发指南
Jdon框架快速开发指南 开发主要步骤如下: JdonFramework6.0以上两步开发见这里. 快速配置指南 新增/查询/修改/删除(CRUD); 批量查询和分页显示 本文Step By Step ...
- 开源项目SMSS开发指南(二)——基于libevent的线程池
libevent是一套轻量级的网络库,基于事件驱动开发.能够实现多线程的多路复用和注册事件响应.本文将介绍libevent的基本功能以及如何利用libevent开发一个线程池. 一. 使用指南 监听服 ...
- 开源项目SMSS开发指南
SMSS是一个由我个人发起的开源项目,目的是建立一套轻量化,高可用,高安全和方便扩展的业务支撑框架.SMSS面向TCP/IP层开发,适合扩展上层业务接口.数据结构传输序列化通过Protobuf实现.传 ...
- Koa框架教程,Koa框架开发指南,Koa框架中文使用手册,Koa框架中文文档
我的博客:CODE大全:www.codedq.net:业余草:www.xttblog.com:爱分享:www.ndislwf.com或ifxvn.com. Koa -- 基于 Node.js 平台的下 ...
- Phaser是一款专门用于桌面及移动HTML5 2D游戏开发的开源免费框架
Phaser是一款专门用于桌面及移动HTML5 2D游戏开发的开源免费框架,提供JavaScript和TypeScript双重支持,内置游戏对象的物理属性,采用Pixi.js引擎以加快Canvas和W ...
- 基于第三方开源库的OPC服务器开发指南(3)——OPC客户端
本篇将讲解如何编写一个OPC客户端程序测试我们在前文<基于第三方开源库的OPC服务器开发指南(2)——LightOPC的编译及部署>一篇建立的服务器.本指南的目的是熟悉OPC服务器的开发流 ...
- 分享一实战性开源MVC框架<Linux、Windows跨平台开发so easy>
一.引子 开源地址 https://github.com/564064202/Moon.Mvc 欢迎加入开发 .NET Core微软还在发力,但作为商用还有一段距离,很多开发库尚不能用于.NET ...
随机推荐
- jenkins主从服务器部署
当服务器为linux系统但也有部分ios代码,此时就需要添加一个从jenkins以便编译ios代码.或者需要多个job同时编译这时就需要搭建主从服务器. 1.主(master)节点安装jenkins ...
- MySQL基础 - 权限配置
为数据库创建特定的用户和密码 mysql>grant all privileges on <database>.* to '<username>'@'localhost' ...
- IntelliJ IDEA 去除IDE自动的参数名 提示功能
- POJ 1141 Brackets Sequence(括号匹配二)
题目链接:http://poj.org/problem?id=1141 题目大意:给你一串字符串,让你补全括号,要求补得括号最少,并输出补全后的结果. 解题思路: 开始想的是利用相邻子区间,即dp[i ...
- Unix IPC之读写锁
linux中读写锁的rwlock介绍 读写锁比mutex有更高的适用性,可以多个线程同时占用读模式的读写锁,但是只能一个线程占用写模式的读写锁: 1,当读写锁是写加锁状态时, 在这个锁被解锁之前, 所 ...
- 算法笔试题整理——升级蓄水池 && 字符串数字表达式计算值 && 求旅游完所有景点需要的最少天数 && 宝箱怪
1. 小米笔试题——升级蓄水池 题目描述: 在米兔生活的二维世界中,建造蓄水池非常简单. 一个蓄水池可以用n个坐标轴上的非负整数表示,代表区间为[0-n]范围内宽度为1的墙壁的高度. 如下图1,黑色部 ...
- 【读书笔记】Android的Ashmem机制学习
Ashmem是安卓在linux基础上添加的驱动模块,就是说安卓有linux没有的功能. Ashmem模块在内核层面上实现,在运行时库和应用程序框架层提供了访问接口.在运行时库层提供的是C++接口,在应 ...
- OA项目Ioc DI(二)
依赖注入:属性和构造函数的注入 一个简单的Demo: IUserInfoDal接口: public interface IUserInfoDal { void Show(); string Name ...
- PCA(Principal Component Analysis)主成分分析
PCA的数学原理(非常值得阅读)!!!! PCA(Principal Component Analysis)是一种常用的数据分析方法.PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可 ...
- Python全栈开发之12、html
从今天开始,本系列的文章会开始讲前端,从htnl,css,js等,关于python基础的知识可以看我前面的博文,至于python web框架的知识会在前端学习完后开始更新. 一.html相关概念 ht ...