RBAC权限框架(Role-Based Access Control)基于角色的权限访问控制的框架,通过用户-角色-权限的关联,非常方便的进行权限管理,在这里不再说明什么是RBAC,请自行百度.
谢谢大家的捧场,如文章中有错误或者,请联系我或者给我发邮件linjie.rd@gmail.com,修正后将会有小礼品送出,谢谢
思路
小张、小王、小李要去动物园看动物,小张和小王提前在网上买好票了,小李没买到票。
三人到了动物园公共展区,这里不需要验票,三人可以看这一片的动物(允许匿名访问)。
继续向前走,到了特别展区,需要验证门票,小张和小王有门票顺利的进入特别展区,小李被拦了下来(身份认证)。
小李不甘心啊,找了个角落,偷偷FQ景区,结果被景区人员抓了被带到了警察局进行教育(非法访问)。
小王在特别展区嫌慢,自己偷偷一不小心走到没有权限的地方而被抓。
相对关系
权限:权限是指是否允许可被访问(被查看)和被使用的一种手段,通常设计具有上下级的关系,在本文中用的是树形结构。
用户:该操作系统的使用者,通过这个操作系统来完成某部分的工作生活。
角色:对用户的一种分类,对权限的一中整理,比如:普通员工有普通员工的权限,经理又经理 的权限。
在实际生活中,一个人有多个身份,比如,爸爸妈妈的孩子,孩子的父母,上班的职工等等。而一个公司的普通员工就有很多人。so,用户和角色是多对多的关系。
而一个角色,也可能有多个权限。比如,一个医生除了治病救人之外,也可以医疗护理。一个警察在打击犯罪的同时,也可以根据法律法规帮助别人。
而一个权限,可能是多个角色拥有的。一个警察在打击犯罪,普通市民也可以参与。往往一件事的事情(类比于一个权限),会有多个角色的参与。
所以,角色和权限也是多对多的关系
数据库设计
因为是RBAC,所以肯定有用户、角色、权限,用户和角色是多对多的关系,角色和权限是多对多的关系。所以,需要有用户表、用户角色关联表、角色表、角色权限关联表、权限表。
用户表:用户代码、用户名、密码。
角色表:角色代码、角色名称。
用户角色关联表:用户代码、角色代码。
权限表:权限代码、权限名称、链接地址、父级权限代码。
角色权限关联表:角色代码、权限代码。
这些已经是基础的表,往往生活工作中会比这复杂多了。在有的时候,还需要特殊用户权限关联管理表。
程序的设计
根据需求,管理员可以管理权限和维护用户信息等,用户可以实现自己的任务需求。
那么,最基础的是获取权限和判断是否有相应的权限,在页面上展示相应 的功能呢以及在操作的时候判断有木有操作的权限。
比如管理员登陆,可以添加角色用户权限等。而用户登录,能够管理商品,订单的信息等。
环境
使用vs2015,sql server2017编程,Win10 Home x64系统软件,兼容IE8,IE9,IE10,谷歌浏览器等,使用PowerDesigner建模,等等
框架技术
整体框架使用了MVC+多层,页面使用了MiniUI框架,考虑到用户量不是很多,使用了Code First。
Code
由于保密条例,不展示业务部分,只有权限
* 获取权限,用户登录后,根据用户所属的角色信息获取相应的权限。
* 判断是否有权限,在用户进行操作前判断是否有权限
实现
*登录: 用户打开网站时,首先判断当前页面不允许匿名访问,判断Session是否有用户会话信息,存在则加载用户信息,不存在读取Cookie,Cookie有登录信息并且没有过期,这加载用户信息,否者跳转登录页面
登录成功之后或者加载完用户信息之后,获取权限列表,显示对应的模块
* 操作: 当用户点击功能后或者在地址栏里输入地址访问,首先通过面向切面编程的思路,使用动作过滤器或者权限过滤器判断是否有对应的权限,有权限就允许操作,没有权限则视为无效操作或者非法操作
无效操作: 返回上一页或者上一步
非法操作: 清空登录信息,清空Session,释放Cookie,跳转到非法访问警告页面,3秒后跳转到登录页面
---------------- Common ----------------