我们目前正在开发一个项目管理软件。而且我们在决定实施安全性的正确方法时遇到了麻烦。我们已经查看了 ACL 和 RBAC,并且已经非常确定出于特定原因我们至少需要两者的组合。但是有几个问题在这两个世界中都没有很好的解决方案。让我解释:
假设您有以下实体:
- 用户,具有不同的角色,即
- 项目负责人
- 工人
- 行政
- 项目
- 分配的用户
- 项目中的任务
现在应该表达以下规则:具有角色工作者的用户只被允许查看与他分配到的项目相关的任务。
这导致用户只被允许查看整个列表中的一些任务。
我们将使用 RBAC 授予Roles实际读取Tasks的权限。但由于涉及特定实体,因此不适用该条件。可以使用 ACL,但我们担心保持 ACL 条目与要求一致(用户可以更改,角色可以更改,可以引入新任务并且必须获得正确的条目,这同样复杂)。
当然,在查看特定项目时可能会有特定WHERE project_id = 123
的查询(每一个条目。
以及如何确保诸如“获取当前用户允许查看的前 25 个任务”之类的事情,而无需从数据库加载所有任务,然后基于 ACL 进行过滤,即处理分页。