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 ...
随机推荐
- MinGw 和 cygwin 的区别和联系
原创 by zoe.zhang .......................................................... 1. windows与Linux操作系统的不同 ...
- 数据科学实战手册(R+Python)书中引用资料网址
本文会持续将<数据科学实战手册(R+Python)>一书中的附带参考资料网址手打出来, 方便访问. 由于书中的参考资料网址太多, 这个文档将可能花费一段时间才能完成. 第一章 P7 Rs ...
- Elasticsearch 邻近查询示例
Elasticsearch 邻近查询示例(全切分分词) JAVA API方式: SpanNearQueryBuilder span = QueryBuilders.spanNearQuery(); s ...
- No.17 selenium学习之路之判断与等待
一.三种等待方式 1.sleep 加载time库.time.sleep() 休眠单位以秒为单位 2.implicitly_wait() 等待页面完全加载完成(左上角转圈结束) 参数为等待时间,等待页面 ...
- 安装配置SVN
官网下载地址,下载完之后如果想看到中文,可以下载语言包进行安装,安装之后TortoiseSVN -> Settings -> General -> Language选项中选择:中文( ...
- python开发之路Day17-算法设计(冒泡排序、选择排序、插入排序、二叉树)
s12-20160514-day17 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: ...
- printf的定义
1. printf的宏定义 #define XXX_ERROR 0#define XXX_WARNING 1#define XXX_INFO 2#define XXX_DEBUG 3#define X ...
- BZOJ2152 [国家集训队] 聪聪可可 [点分治]
题目传送门 聪聪可可 Time Limit: 3 Sec Memory Limit: 259 MBSubmit: 5237 Solved: 2750[Submit][Status][Discuss ...
- 【知了堂学习笔记】java web 简单的登录
最近皮皮潇在学习java web,刚接触了简单的东西,所以今天给大家带来一个简单的登录实现. 页面: 页面代码: <%@ page language="java" conte ...
- Oracle数据库脚本中的set define off
2018年8月6日15:11:34 Oracle数据库脚本中的set define off 前言 最近在公司写需求,接触到脚本,第一句set define off;就不知道什么意思了,查询后记录之. ...