请教一下权限控制的最佳实践

4 天前
 ginakira

想请教一下各位 V 友,最近在学习 Golang ,写一个小项目的时候在权限控制上遇到了一些疑问。 背景如下:

  1. 用户可以属于多个组;
  2. 每个组都有固定切相同的角色,用户在一个组中可以拥有多个角色;
  3. 每个资源仅属于一个组;
  4. 组内的角色对组内的资源有不同的访问权限;

诚心求问这样的需求应该选用什么权限控制模型? Go 下除了 Casbin 外有什么推荐的权限控制库吗?

2506 次点击
所在节点    程序员
16 条回复
hezhiming1993
4 天前
RBAC
kaneg
4 天前
需要控制访问资源的范围吗?比如甲乙属于一个组,但甲只能可以看自己组里面的内容,乙可以看所有组的。如果是这样的话,单纯的 RBAC 就不够了,需要在其基础上再加上对资源范围的控制。
ginakira
4 天前
@kaneg 感谢解答。需要的是:对应组的资源只有拥有对应组对应角色的用户才可以访问,比如甲只有在有 A 组查看角色的条件下才能查看 A 组资源。这种情况 RBAC 是否适用呢?
kong0bbs
4 天前
自己基于 RBAC 模型实现
czk1997
4 天前
@ginakira 组中组嘛。
不像自己实现可以参考用基于 google zanzibar 的。现成框架一大堆的,很多都是平台无关。
权限控制本质就是构建 dag ,然后看两种资源之间是否可以联通。
afxcn
3 天前
无论你是用组来限定资源权限还是用角色,最终都会回到具体的用户的权限。

用组:用户 -> 组 -> 角色 -> 权限

用角色:用户 -> 角色 -> 权限

只是需要查询多一些而已
HashV2
3 天前
直接找个 RCBA 的架子用就完事了
coderzhangsan
3 天前
按照权限设计理论,RBAC 属于垂直权限,数据资源控制属于水平权限,二者相互独立;一般情况下垂直权限是必须要具备的,至于水平权限,如果有数据资源控制,则需要在垂直权限的基础上二次设计。
ginakira
3 天前
@czk1997
@afxcn
@HashV2
@coderzhangsan 感谢几位的解答,受教了。
Nazz
3 天前
推荐自己写
NoKey
3 天前
所有权限,基于组去查询就可以了,还是有角色,但是角色是隶属于某个组的
比如你把角色 Ra 分给用户 UserA ,分的时候,要确定是那个组,那么形成 组-角色-人员 这样一个关联关系
所有操作,都居于这个层次关系去约束
ginakira
3 天前
@NoKey 感谢解答。
hxndg
2 天前
真实的生产往往不是光 RBAC ,都是组合考虑的。
如果走单纯的 RBAC 你这个里面我目前可以明确看到有个问题是组一多就角色膨胀了
另外就是资源只属于一个组这个假设不确定是否稳固
所以建议 RBAC + ABAC 控制,通用角色用 RBAC ,组用 ABAC 控制
ginakira
2 天前
@hxndg 感谢指教!目前的设计是与 11# 所说的类似,基于 “人员-组-角色” 的关联关系来约束,看起来有些像 RBAC with domain ,不知道这样设计是否妥当。还有对于您提到的 RBAC+ABAC 控制不确定我的理解是否正确,比如对于一次需要鉴权的操作,先使用 ABAC 控制用户所在的组是否与资源所属的组一致,再使用 RBAC 根据用户的角色来控制用户能否对资源执行此次操作吗?
hxndg
2 天前
@ginakira
@NoKey 我不是很确定 11 的具体含义,读起来觉得组不是属性,而是一个实体,感觉会造成真实的角色是组*角色的膨胀
关于第二个问题,
是的
我说的 R+A BAC 里面,角色和对象是实体,组属于属性
ginakira
2 天前
@hxndg 是的,目前组确实是实体。目前的关联关系不是通过创建 (组*角色) 的角色实体再与用户关联的,而是直接用 (用户,组,角色) 这样的三元组关联起来的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1053719

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX