Ruby 区别于 RBAC,使用一种权限标签方法来设置用户权限的初步思考

y9info · 2024年02月24日 · 最后由 EssaMattou 回复于 2024年04月16日 · 481 次阅读

通常的的 RBAC 权限方式,其基本思路是,赋予角色身份某种权限,用户在获取角色身份的同时,取得相应权限。这种抽象方式,符合日常经验,本身也有合理性。

但是有一点问题是,“权限溢出”时不够灵活,譬如销售员有确定价格、制作合同、签署合同的权限,财务人员有收款、开具发票的权限,但是在某些时候(譬如派到外地去临时开拓业务),我们希望赋予销售员临时收款权限,这时候需要变更销售员的角色才能实现,或者设置另外一个 RoleB 类销售员的角色才能实现,在这种权限需要溢出时不够灵活。

同样的道理,假如我们希望新入职未过试用期的销售员拥有一般销售员的全部权限但是不能有确定价格权限,这个时候需要“权限收缩”,如果太依赖于角色,需要新设一个新销售人员角色,再将其赋予给新入职的销售人员,灵活度不够。

基于上述情况,考虑到“权利标签”的权限设置方式,以“权限”为是视野和最小颗粒度,当做一个个标贴,贴给谁,谁就有权限,撕掉标签,就丧失权利,初步设想如下:

many_tags[candoA,candoB,candoC,candoD,candoE,candoF....]
Permisson1_tag = candoA
Permisson2_tag = candoB
Permisson3_tag = candoA+B
 = permission1 + permission2

Super_permisson = candoALL
Manager_role`s permission = cando A + cando B + Cando C
Teacher_role`s permission =  Professor_role`s permission - candoB (教师角色权限为:教授角色的权限标签中去掉权限“candoB”)
=  cando M + cando N + Cando L(另一种表达:教师角色权限为能做M + N +L)

某一个教师需要临时增加阅卷权限
TeacherA`s permisson_in_24_hour = TeacherA`s current permisson + cando R(阅卷标签)

建立儿童教师组的权限:
Children_teacher_group`s permission = candoA+B+C+D+X+Y -M-P
        或者另一种表达                            = Manager_role`s permission - candoQ - candoR

将某一个具体的用户临时纳入儿童教师组
push_zhangsan_to_Children_teacher_group_in_20_days
在20天内,张三获得儿童教师组的全部权限

将某一类角色纳入儿童教师组

RoleA_turned_into_Children_teacher_group_member_in_365_days(角色 A 自动在长期譬如 365 天内获得儿童教组的全部权限,并且该类角色在儿童教师组的权限增长、削减时,同步削减,如果某一个教师,拥有 roleA,则相应的获得教师角色的全部权限,并且随着 roleA 的权限同步变动,同时该教师还可以通过增加临时权限标签的方式,取得 roleA 之外的临时权限)

以上是初步思考,很多不成熟之处,供探讨。

这里有边权限介绍文章可以参考·一下:https://blog.csdn.net/qq_41661800/article/details/130266178

谷歌在 2019 年放出了一篇论文是关于精细化全球授权的,Zanzibar: https://zanzibar.tech/ .通俗的说是 基于关系的权限控制精细化权限控制,但谷歌并没有给出具体实现,以下是我找到的几个开源实现

https://github.com/openfga/openfga

https://github.com/Permify/permify

https://github.com/authzed/spicedb

以及我的笔记

因为开源的并没有完全实现论文(只实现了 server 端,并没有实现 Leopard Indexing System),也都没有实现超级管理员的功能(诸如 给用户 a 分配所有资源 b 的权限),所以自己也想做一个,目前写了一部分了,欢迎交流

这种就是单独的一个表来单独授权,rbac 与表的授权求并集,与表的取消授权求交集

4 楼 已删除

我很感谢您为像我这样的人提供了如此出色的资源,Head Soccer

需要 登录 后方可回复, 如果你还没有账号请 注册新账号