其他分享
首页 > 其他分享> > MASA Auth - 权限设计

MASA Auth - 权限设计

作者:互联网

权限术语

RBAC

RBAC (Role-Based Access Control,基于角色的访问控制),引入了 Role(角色)的概念,并且将权限与角色进行关联。用户通过扮演某种角色,具有该角色的所有权限。

即权限,角色,用户之间的关系是多对多对多

RBAC0

用户和角色的关系是多对多

权限和角色的关系是多对多

RBAC1

RBAC2

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的依赖模型

erd.png

用户管理

简单的引入一个RBAC无法满足一个工程化的项目,比如批量操作,前后端集成等

团队

单个用户的管理已经出来了,但日常中我们很少会对单个用户进行授权。更多的是针对一组(批)人进行操作。

team.png

前端集成

到目前为止,我们设计的都还在后端。而前端关心的是页面展示相关的,比如菜单,页面元素等

等一下!

这里要设计什么?或许可以偷个懒,在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,欢迎联系我们

16373211753064.png

标签:MASA,角色,用户,Auth,RBAC,权限,com
来源: https://www.cnblogs.com/MASA/p/16304403.html