【发布时间】:2012-11-27 09:10:17
【问题描述】:
我们目前正在开发一个项目管理软件。而且我们在决定实施安全性的正确方法时遇到了麻烦。我们已经查看了 ACL 和 RBAC,并且已经非常确定出于特定原因我们至少需要两者的组合。但是有几个问题在这两个世界中都没有很好的解决方案。让我解释一下:
假设您有以下实体:
-
用户,具有不同的角色,即
- 项目负责人
- 工人
- 管理员
- 项目
- 分配的用户
- 项目中的任务
现在应该表达以下规则: 具有Worker 角色的用户 只能查看与他分配到的项目相关的任务。
这导致用户只被允许查看整个列表中的一些任务。
我们将使用 RBAC 授予角色实际读取任务的权限。但由于涉及特定实体,因此不适用该条件。可以使用 ACL,但我们担心保持 ACL 条目与要求一致(用户可以改变,角色可以改变,新的任务 可以引入一个必须得到正确的条目,这同样复杂)。
当然,在查看特定项目 (WHERE project_id = 123) 时可能会有特定的查询,但这对于“查看我当前的所有任务”没有帮助,基本上每个任务都可以考虑显示,但必须检查每个条目的 ACL。
以及如何确保“获取当前用户允许查看的前 25 个任务”之类的内容,而不从数据库中加载所有任务,然后根据 ACL 进行过滤,即处理分页。
【问题讨论】:
标签: php security zend-framework2 acl rbac