isayme / blog

https://blog.isayme.org
MIT License
10 stars 2 forks source link

权限系统及模型 #34

Open isayme opened 5 years ago

isayme commented 5 years ago

主要介绍当前主流的权限系统及适用的场景. 理解错误的地方麻烦之处.

用户是抽象概念, 包含但不限定是 user(person).

ACL

ACL 是 Access Control List 的缩写,称为访问控制列表. 定义了谁可以对某个数据进行何种操作. 关键数据模型有: 用户, 权限.

ACL规则简单, 也带来一些问题: 资源的权限需要在用户间切换的成本极大; 用户数或资源的数量增长, 都会加剧规则维护成本;

典型应用

文件系统

文件系统的文件或文件夹定义某个账号(user)或某个群组(group)对文件(夹)的读(read)/写(write)/执行(execute)权限.

网络访问

防火墙: 服务器限制不允许指定机器访问其指定端口, 或允许特定指定服务器访问其指定几个端口.

RBAC

RBAC 是 Role-based access control 的缩写, 称为 基于角色的访问控制. 核心数据模型有: 用户, 角色, 权限.

用户具有角色, 而角色具有权限, 从而表达用户具有权限.

由于有角色作为中间纽带, 当新增用户时, 只需要为用户赋予角色, 用户即获得角色所包含的所有权限.

RBAC 存在多个扩展版本, 包含更为丰富的功能:

ABAC

ABAC 是 Attribute-based access control 的缩写, 称为 基于属性的访问控制.

权限和资源当时的状态(属性)有关, 属性的值可以用于正向判断(符合某种条件则通过), 也可以用于反向判断(符合某种条件则拒绝):

参考资料

isayme commented 5 years ago

Q: 对层级资源的权限处理. 典型的是文件库. 用户A文件B有权限读写, 但是对文件B所在文件夹C没有读权限, 那么用户A到底有没有文件B的读写权限?

isayme commented 5 years ago

Q: 存在读权限的情况下, 如何做到批量读及分页? Gitlab 获取 repo 列表, 不同的人看到的数据不一样, 能看到的包括: 公开的 repo; 加入的 repo; 可见性为 internal 且当前账号是 group 成员的 repo;

isayme commented 5 years ago

权限模型的一些实现参考

Node.js