权限术语

  • 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 - 权限设计的更多相关文章

  1. thinkphp5的Auth权限认证实战

    thinkphp5的Auth权限认证实战 一.总结 一句话总结:基于角色的权限管理(真正做一遍,就会发现很简单,不然一直都是半懂不懂的) 角色 权限 真正做一遍,就会发现很简单,不然一直都是半懂不懂的 ...

  2. Thinkphp基于规则的Auth权限认证类

      PS:onethink是基于该权限认证类实现,Auth类作为官方类库,在Library\Think里面. 其实Auth类也是基于角色访问控制RBAC扩展的,具体到节点的权限校验方式还是需要根据业务 ...

  3. 百万年薪python之路 -- RBAC角色权限设计

    RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成"用 ...

  4. AppBox升级进行时 - 扁平化的权限设计

    AppBox 是基于 FineUI 的通用权限管理框架,包括用户管理.职称管理.部门管理.角色管理.角色权限管理等模块. AppBox v2.0中的权限实现 AppBox v2.0中权限管理中涉及三个 ...

  5. 一个基于RBAC0的通用权限设计清单

    注:RBAC0与RBAC1不同在于权限继承.关于RBAC1的权限设计,敬请关注作者后续CSDN博客.1,用户表 保存系统用户信息,如张三.李四,字段可以有id.name.fullname.email. ...

  6. Codeigniter整合Tank Auth权限类库的教程

    Codeigniter整合Tank Auth权限类库的教程一开始找了很多CodeIgniter的类库,觉得都不怎么样,后来干脆自己通过CI的钩子系统写了权限管理.但是还是不怎么满意,后来有人推荐tan ...

  7. ASP.NET MVC +EasyUI 权限设计(二)环境搭建

    请注明转载地址:http://www.cnblogs.com/arhat 今天突然发现博客园出问题了,老魏使用了PC,手机,平板都访问博客园了,都是不能正常的访问,原因是不能加载CSS,也就是不能访问 ...

  8. ASP.NET MVC +EasyUI 权限设计(一)开篇

    在前一段时间中,老魏的确非常的忙碌,Blog基本上没有更新了,非常的抱歉,那么在后面的时间中,老魏会尽量的抽时间来写的,可能时间上就不太富裕了.今天开始呢,老魏会和大家分享一下关于权限设计的有关文章, ...

  9. WisDom.Net 框架设计(五) 权限设计

    WisDom.Net --权限设计 1.需求分析     基本在所有的管理系统中都离不开权限管理.可以这么说,权限管理是管理系统的核心所在. 权限管理说白一些就是每个人能够做什么,不能够做什么.可以说 ...

  10. JAVA 数据权限设计

    数据权限设计 前言 在各种系统中.要保证数据对象的安全性以及易操作性,使企业的各业务部门.职能部门可以方便并且高效的协同工作,那么一个好的数据权限管理设计就成为一个关键的问题.尽管企业中各个单元的工作 ...

随机推荐

  1. 关于python中带下划线的变量和函数 的意义

    总结: 变量: 1.  前带_的变量:  标明是一个私有变量, 只用于标明, 外部类还是可以访问到这个变量 2.  前带两个_ ,后带两个_ 的变量:  标明是内置变量, 3.  大写加下划线的变量: ...

  2. Sencha Architect 安装与使用

    http://www.sencha.com/products/touch/ Sencha SDK Tools Advanced JavaScript and CSS Project Build Too ...

  3. HDU 2674 N!Again(数学思维水题)

    题目 //行开始看被吓一跳,那么大,没有头绪, //看了解题报告,发现这是一道大大大的水题,,,,,//2009 = 7 * 7 * 41//对2009分解,看它有哪些质因子,它最大的质因子是41,那 ...

  4. Swift - 使用位运算提取颜色,合并颜色

    通常我们可以使用16进制的格式表示RGB颜色,比如0x2f88c0.通过位操作运算,能很方便的将其中的R,G,B颜色各部分分别提取出来.反之,也可以将R,G,B颜色值组合成一个完整的颜色. 1,提取颜 ...

  5. HTML入门

    一些说明 写在前面:HTML和CSS,当你了解所有规则后,你应该多写页面并记录你出现的问题,这才是学习HTML和CSS的最佳方法 这是我学习一段时间之后,再次回顾HTML,希望大家也对HTML有不一样 ...

  6. C语言标准io函数总结

    转自:http://blog.csdn.net/sun_top/article/details/4235992本来是在vscode上用markdown排好版的,结果复制到这上面就变了形,无奈. 函数列 ...

  7. CentOS 配置使用 EPEL YUM 源

    EPEL(Extra Packages for Enterprise Linux)是一个由特别兴趣小组创建.维护并管理的,针对 红帽企业版 Linux(RHEL)及其衍生发行版(比如 CentOS. ...

  8. 1202. [HNOI2005]狡猾的商人【贪心 或 并查集】

    Description 刁姹接到一个任务,为税务部门调查一位商人的账本,看看账本是不是伪造的.账本上记录了n个月以来的收入情况,其中第i 个月的收入额为Ai(i=1,2,3...n-1,n), .当 ...

  9. 搭建一个单纯学习hibernate的项目

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  10. FP变更物料编码(增加尾缀)

    FP物料编码增加尾缀的程序,标准物料编码是18位,目前程序中增加尾缀的有三种1.DUMMY 2.SP开头 3.P开头 4.C开头 5.BP对应处理程序如下:1.DUMMY       SAP_MATE ...