MASA Auth - 权限设计
权限术语
Subject:用户,用户组
Action:对Object的操作,如增删改查等
Object:权限作用的对象,也可以理解为资源
Effect:规则的作用,如允许,拒绝
Condition:生效条件
Permission:允许(拒绝)用户(用户组)在条件允许下对对象(资源)的动作
Role:权限集合,权限数量>=1
RBAC
RBAC (Role-Based Access Control,基于角色的访问控制),引入了 Role(角色)的概念,并且将权限与角色进行关联。用户通过扮演某种角色,具有该角色的所有权限。
即权限,角色,用户之间的关系是多对多对多
RBAC0
- 用户
- 角色
- 权限
- 会话
用户和角色的关系是多对多
权限和角色的关系是多对多
RBAC1
- 角色继承
- 权限扩展
RBAC2
互斥约束
用户,角色,权限均可互斥。不允许存在任意冲突。
基数约束
角色分配次数受限,比如一个公司只有一个CEO
先决条件角色
权限赋予要从低到高。如:要先有XX副总权限才能获取XX总权限。
静态职责分离(目前先支持静态职责分离)
用户无法被赋予冲突的角色
动态职责分离
用户会话中无法激活冲突的角色
RBAC3
RBAC0 + RBAC1 + RBAC2
ABAC
Attribute Based Access Control,基于属性的权限验证。允许更细粒度的控制X属性的Y资源在Z条件下进行A操作。相较于RBAC,会对开发人员提出更高的要求,目前我们先只介绍到RBAC。
举个例子
我们通过预设博客文章场景来反推实现方式
用户角色
一篇文章要面对两种角色,即:读者,管理员
[{
"Subject": "Avril",
"Roles":["ArticleReader"]
}, {
"Subject": "Dodd",
"Roles":["ArticleManager"]
}]
角色
读者将获得读文章权限,管理员则获得管理文章权限
[
{
"Name": "ArticleReader",
"Permissions": [
"ReadArticle"
]
}, {
"Name": "ArticleManager",
"Permissions": [
"ManageArticle"
]
}
]
权限
角色有了,依赖的权限也有了,接下来我们需要继续把权限明细确认一下
[
{
"Name": "ReadArticle",
"Effect": "Allow",
"Action": ["Read"],
"Object": ["Article"]
}, {
"Name": "ManageArticle",
"Effect": "Allow",
"Action": ["Create", "Read", "Update", "Delete"],
"Object": ["Article"]
}
]
依赖模型
基于RBAC3的依赖模型

用户管理
简单的引入一个RBAC无法满足一个工程化的项目,比如批量操作,前后端集成等
团队
单个用户的管理已经出来了,但日常中我们很少会对单个用户进行授权。更多的是针对一组(批)人进行操作。

前端集成
到目前为止,我们设计的都还在后端。而前端关心的是页面展示相关的,比如菜单,页面元素等
等一下!
这里要设计什么?或许可以偷个懒,在Objects里增加一个ObjectType用来区分菜单还是页面元素即可?
ObjectType被修改的可能性很小,所以我们将在SDK中提供枚举来支持
总结
至此,我们把RBAC与用户管理的部分已经设计完了。或许它缺少了传统意义上的组织架构树,但它带来了更加松散的,扁平化的团队管理。
(本文章不代表最终设计)
开源地址
MASA.BuildingBlocks:https://github.com/masastack/MASA.BuildingBlocks
MASA.Contrib:https://github.com/masastack/MASA.Contrib
MASA.Utils:https://github.com/masastack/MASA.Utils
MASA.EShop:https://github.com/masalabs/MASA.EShop
MASA.Blazor:https://github.com/BlazorComponent/MASA.Blazor
如果你对我们的 MASA Framework 感兴趣,无论是代码贡献、使用、提 Issue,欢迎联系我们

MASA Auth - 权限设计的更多相关文章
- MASA Auth - SSO与Identity设计
AAAA AAAA即认证.授权.审计.账号(Authentication.Authorization.Audit.Account).在安全领域我们绕不开的两个问题: 授权过程可靠:让第三方程序能够访问 ...
- thinkphp5的Auth权限认证实战
thinkphp5的Auth权限认证实战 一.总结 一句话总结:基于角色的权限管理(真正做一遍,就会发现很简单,不然一直都是半懂不懂的) 角色 权限 真正做一遍,就会发现很简单,不然一直都是半懂不懂的 ...
- Thinkphp基于规则的Auth权限认证类
PS:onethink是基于该权限认证类实现,Auth类作为官方类库,在Library\Think里面. 其实Auth类也是基于角色访问控制RBAC扩展的,具体到节点的权限校验方式还是需要根据业务 ...
- 百万年薪python之路 -- RBAC角色权限设计
RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成"用 ...
- AppBox升级进行时 - 扁平化的权限设计
AppBox 是基于 FineUI 的通用权限管理框架,包括用户管理.职称管理.部门管理.角色管理.角色权限管理等模块. AppBox v2.0中的权限实现 AppBox v2.0中权限管理中涉及三个 ...
- 一个基于RBAC0的通用权限设计清单
注:RBAC0与RBAC1不同在于权限继承.关于RBAC1的权限设计,敬请关注作者后续CSDN博客.1,用户表 保存系统用户信息,如张三.李四,字段可以有id.name.fullname.email. ...
- Codeigniter整合Tank Auth权限类库的教程
Codeigniter整合Tank Auth权限类库的教程一开始找了很多CodeIgniter的类库,觉得都不怎么样,后来干脆自己通过CI的钩子系统写了权限管理.但是还是不怎么满意,后来有人推荐tan ...
- ASP.NET MVC +EasyUI 权限设计(二)环境搭建
请注明转载地址:http://www.cnblogs.com/arhat 今天突然发现博客园出问题了,老魏使用了PC,手机,平板都访问博客园了,都是不能正常的访问,原因是不能加载CSS,也就是不能访问 ...
- ASP.NET MVC +EasyUI 权限设计(一)开篇
在前一段时间中,老魏的确非常的忙碌,Blog基本上没有更新了,非常的抱歉,那么在后面的时间中,老魏会尽量的抽时间来写的,可能时间上就不太富裕了.今天开始呢,老魏会和大家分享一下关于权限设计的有关文章, ...
随机推荐
- 小程序TAB列表切换内容动态变化,scrollview高度根据内容动态获取
滑动tab选项卡 一.在小程序里面tab选项卡是用的是自带的swiper组件,下面直接上代码 <view class="container"> <view cla ...
- 【Android开发】Android 颜色透明度换算
透明度 透明度分为256阶(0-255),计算机上用16进制表示为(00-ff). 透明就是0阶,不透明就是255阶,如果50%透明就是127阶(256的一半当然是128,但因为是从0开始,所以实际上 ...
- 将百度地图Demo抽取出来安到自己的程序中
今日所学: 使用百度地图ADK实现手机定位 [Android]使用百度.高德.腾讯地图SDK获取定位数据与屏幕截图分享到QQ_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili 代码获取SHA1 (2 ...
- HashMap和ConcurrentHashMap的原理和实现
一.线程不安全的HashMap 多线程环境下,使用HashMap进行put操作会引起死循环(jdk1.7 Entry链表形成环形数据结构),导致CPU利用率接近100%. 结构:数组 table[]+ ...
- Win7运行net5 wpf条件
Win7运行net5 wpf条件 win7 sp1 dotnet-runtime-5 vc_redist KB2999226 KB4457144 Tips:官网条件最后一个最坑爹,KB2533623不 ...
- ubuntu下Docker配置阿里云镜像加速
1.确认正确安装好docker,登录阿里云,打开如下界面 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 2.复制下面那段代码, ...
- SpringMVC 解析(五)URI链接处理
URI在网络请求中必不可少,Spring提供了一些工具类用于解析或者生成URL,比如根据参数生成GET的URL等.本文会对Spring MVC中的URI工具进行介绍,本文主要参考Spring官方文档. ...
- html显示与隐藏元素的几种方式
html显示与隐藏元素的几种方式 1.display none : 无 隐藏元素 block : 显示 转换为块级元素 不占位:当隐藏的时候元素就完全没有了.不能看见和操作该元素. 优点:为其他元 ...
- python基础练习题(题目 查找字符串。)
day39 --------------------------------------------------------------- 实例061:查找字符串 题目 查找字符串. 分析:查找字符串 ...
- Ubuntu 百度飞桨和 CUDA 的安装
Ubuntu 百度飞桨 和 CUDA 的安装 1.简介 本文主要是 Ubuntu 百度飞桨 和 CUDA 的安装 系统:Ubuntu 20.04 百度飞桨:2.2 为例 2.百度飞桨安装 访问百度飞桨 ...