型号(表):
- 项目(id,名称,category_id,status_id)
- 类别(ID,名称)
- 状态(id,名称)
我需要按确切的类别和确切的状态限制对项目的访问。
情况1。
Role1 应该可以访问具有 id 1 和 3 的类别的项目,但 Role2 可以访问具有 id 2 和 4 的类别的项目。
情况2。
角色应有权访问项目:类别 1,但仅限状态为 5 或 6 的项目为类别 2,但仅限状态为 7 或 8 的项目
可以创建和删除类别和状态。
如何在 RBAC 概念中实现这样的访问控制?
对于情况 1,我的想法是动态创建名称为“accessItemWithCategory_{$categoryId}”的权限,并将其分配给适当的角色,然后检查用户是否可以(“accessItemWithCategory_{$categoryId}”)。它有效,但感觉不对。
对于情况 2,如果继续这种方法,我会获得像“accessItemWithCategory_{$categoryId}_Status_{$statusId}”这样的权限,它只是丑陋且极其不灵活。
如果不在权限名称中使用 id 比什么?我可以使用简单的权限“accessItem”和规则来检查带有角色和项目参数的额外表,这些参数将允许角色访问项目?但这意味着将授权控制转移到 RBAC 之外,并在角色层次结构支持下地狱。