【发布时间】:2015-10-29 11:53:39
【问题描述】:
简介
我正在设计我的应用程序基于角色权限的访问系统。 在我的系统中,我有以下角色:
- 根
- 办公室经理
- 审计员
- 客户
- 工人
例如,让我们查看用户与“任务”实体的关系。
Worker 和 Customer 是非常特殊的角色,他们对自己的任务几乎只有只读权限。 Workers 只会看到“任务”对象的几个属性。 根据系统业务规则,在某些情况下他们将能够更新一两个属性。
Root 用户可以做任何事情,它可以创建、更新、读取、删除“任务”。 办公室经理可以列出、更新和创建“任务”。 审核员只能列出任务。
Root、Auditor 和 Office manager 将有权访问相同(完整)的“任务”实体属性集。 这三种用户类型将通过相同的管理界面(Web 应用程序模块)访问系统。
客户将通过单独的面向角色的模块(客户模块)访问系统,功能过于具体。 Workers - 也是(worker 模块)。
因此,使用所描述的示例,我们可以说我们可以为 Root、审核员和办公室经理创建以下权限:
- LIST_TASKS
- CREATE_TASKS
- UPDATE_TASKS
- DELETE_TASKS
这适用于他们,但不适用于 Customer 和 Worker。 对于 Worker,我们可以这样做:
- LIST_WORKER_OWN_TASKS
- UPDATE_WORKER_TASK_STATUS
...等等。
但这对我来说意义不大。 除了 Worker 之外没有其他人会使用此权限。 此外,无法使用权限来描述 Worker 能够编辑“任务”实体的某些属性的条件。
总结
所以,我得出一个结论,我需要一个混合访问控制系统。 客户和工人将是没有任何权限的角色。 Root、Auditor 和 Office manager 将是具有绑定到每个角色的权限集的角色。
最后,我们可以将这种机制称为基于混合权限和角色的访问系统。
问题
有这样的设计很正常吗? 我想错了吗? 或者最好使用非常详细的权限列表来描述 Customer 和 Worker 逻辑?
【问题讨论】:
标签: php permissions roles rbac