实现 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,方便操作。