RBAC


Role-Based Access Control 基于角色的访问控制
用户通过成为适当角色的成员而得到这些角色的权限
简化了权限的管理,层级相互依赖 权限赋予给角色 而把角色又赋予用户 权限设计清楚 方便管理
权限管理的使用场景
一是鉴权管理,即权限判断逻辑
1. 最基本的权限管理是菜单管理,用户没有权限的功能模块在菜单节点上是不显示的
普通业务人员登录系统后,是看不到【用户管理】菜单的
2. 功能权限管理
B/S系统的功能体现为URL,所以功能权限管理主要是针对URL访问的管理
经过授权,部门经理可以查看【用户管理】菜单,并查看部门用户信息,但权限设计要求,该部门经理没有添加用户的权限
在访问【添加用户】的功能(URL)时,应该有没有授权的提示信息
同时在【用户管理】页面上,【添加用户】的按钮应该灰色显示,不能点击
3. 行级权限管理
论坛管理员,权限设计要求 A能管理论坛 【新闻版块】,不能管理论坛 【技术交流】
此时的权限设计就应该根据论坛的相应ID来判断权限信息
4. 列级权限管理
业务权限设计要求,除销售人员以外,其他用户不能看到客户的联系方式信息
此时的权限设计要判断相应的字段(列)是否可以显示
5. 组织机构/部门级数据权限管理
业务权限设计要求,销售一部的人员只能看到本部门的销售订单,
销售二部的人员只能看到本部门的销售订单,但销售经理可以同时看到销售一部和销售二部的销售订单
此时的权限设计就要根据销售订单数据本身的部门属性来做判断
6. 范围型业务数据权限管理
大卖场销售人员在下销售订单时,要选择相应的产品所在仓库信息
业务权限设计要求,【国美】的销售人员在选择仓库的下拉列表中不能看到【广州仓库】,
而【大中电器】的销售人员在选择仓库的下拉列表中不能看到【北京顺义仓库】
授权管理
权限分配过程以上的权限管理内容都要通过系统的授权功能来分配给具体的用户,授权功能应该足够灵活
1. 直接对用户授权,直接分配到用户的权限具有最优先级别
2. 对用户所属岗位授权,用户所属岗位信息可以看作是一个分组,和角色的作用一样,但是每个用户只能关联一个岗位信息
3. 对用户所属角色授权,用户所属角色信息可以看作是一个权限分组,每个用户可以关联多个角色
4. 角色直接关联具体的功能权限(URL),也可以关联负权限,即此角色关联的权限不能使用负权限功能负权限具有优先级别
5. 分级授权,系统管理员可以将自己拥有的权限信息授权给其他用户即可以设置分级管理员和超级管理员
RBAC介绍
授权是Who 、What 、How 三元组之间的关系
是Who 对What 进行How 的操作 “主体”对“客体”的操作
Who 权限的拥有者或主体(如 User Role)
What 操作或对象(operation object)
How 具体的权限(Privilege,正向授权与负向授权)
RBAC分为RBAC0、RBAC1、RBAC2、RBAC3
RBAC0 是RBAC的核心思想
RBAC1 把RBAC的角色分层模型
RBAC2 增加RBAC的约束模型
RBAC3 是RBAC2 + RBAC1
RBAC0 RBAC的核心
RBAC1 基于角色的分层模型
RBAC2、是RBAC的约束模型
RBAC3、就是RBAC1+RBAC2
表设计
权限系统完全遵循  RBAC  模型是很难的
因为系统业务上差异化的业务考量
RBAC 模型
不要完全参照 而是在这个基础之上 融入业务
达到适用业务
背景需求
需要在“权限”=>“角色”=>“用户”之间 在赋予一个特殊的角色“客服”
一个用户想把权限分配到“客服”角色上
然后由几个“客服”去操作对应的业务流程
1、权限赋予
把当前用户的权限拉出来 然后分配的客服可以小于等于当前用户的权限
2、权限加载
用户登录后 第一次使用权限判断的时候加载权限
3、权限判断
数据操作需要判断是不是当前归属的用户的数据 属于业务层 就算不是客服 也是需要判断
4、禁用|启用
禁用启用 也是正常的用户流程 添加到禁用列表里 如果被禁用 就无法操作任何内容
rbac 权限管理展示系统
//github.com/php-casbin/php-casbin
All the languages supported by Casbin:
golang     java     nodejs     php
Casbin     jCasbin     node-Casbin     PHP-Casbin
production-ready     production-ready     production-ready     production-ready
python     dotnet     delphi     rust
PyCasbin     Casbin.NET     Casbin4D     Casbin-RS
production-ready     production-ready     experimental     production-ready
Web frameworks 中间件
//casbin.org/docs/zh-CN/middlewares