实现 RBAC (Role Based Access Control) 的注意要点
RBAC = Role Based Access Control, 在系统中一般是处理 Organizing Permissions,规定谁能干什么。RBAC 系统的核心概念有:Role, Permission, Operation。例如一个用户有很多种角色,一个角色有很多种权限,一种权限能执行多种操作。
- 在代码中,不建议这么写代码:
if user.role in ['admin', 'xyz']:
,而应该写作:if user.can(Permission.EDIT_REPORT, report)
。如果直接将用户和角色挂钩,那代码库里面就会时不时有代码变更。建议的处理方式是:将 role x permission 在代码中解耦,数据库中存这份数据。 - 权限一般 Positve,不要 Negative:统一风格,权限是
用户能做什么
, 而不是用户不允许做什么
。 - 可以在 User 和 Role 中间再加一个 Group,方便操作。