Open isayme opened 5 years ago
Q: 对层级资源的权限处理.
典型的是文件库. 用户A
对文件B
有权限读写, 但是对文件B
所在文件夹C
没有读权限, 那么用户A
到底有没有文件B
的读写权限?
Q: 存在读权限的情况下, 如何做到批量读及分页? Gitlab 获取 repo 列表, 不同的人看到的数据不一样, 能看到的包括: 公开的 repo; 加入的 repo; 可见性为 internal 且当前账号是 group 成员的 repo;
权限模型的一些实现参考
主要介绍当前主流的权限系统及适用的场景. 理解错误的地方麻烦之处.
ACL
ACL 是 Access Control List 的缩写,称为访问控制列表. 定义了谁可以对某个数据进行何种操作. 关键数据模型有: 用户, 权限.
ACL规则简单, 也带来一些问题: 资源的权限需要在用户间切换的成本极大; 用户数或资源的数量增长, 都会加剧规则维护成本;
典型应用
文件系统
文件系统的文件或文件夹定义某个账号(user)或某个群组(group)对文件(夹)的读(read)/写(write)/执行(execute)权限.
网络访问
防火墙: 服务器限制不允许指定机器访问其指定端口, 或允许特定指定服务器访问其指定几个端口.
RBAC
RBAC 是 Role-based access control 的缩写, 称为 基于角色的访问控制. 核心数据模型有: 用户, 角色, 权限.
用户具有角色, 而角色具有权限, 从而表达用户具有权限.
由于有角色作为中间纽带, 当新增用户时, 只需要为用户赋予角色, 用户即获得角色所包含的所有权限.
RBAC 存在多个扩展版本, 包含更为丰富的功能:
ABAC
ABAC 是 Attribute-based access control 的缩写, 称为 基于属性的访问控制.
权限和资源当时的状态(属性)有关, 属性的值可以用于正向判断(符合某种条件则通过), 也可以用于反向判断(符合某种条件则拒绝):
参考资料