0

对于我正在构建的应用程序,我需要某种权限系统。我想自己建造它。现在有几个选择。

  • 访问控制列表
  • 基于角色的系统
  • 基于组

我发现 ACL 有点过头了,基于角色的只有在你知道你的资源和基于组是我倾向于的情况下才真正起作用,但是我有一个问题。

我有一个系统,用户可以在其中编辑艺术家(即Superfans),所有对此有资格的用户都将进入某种group/role。但是我如何(这是动态部分发挥作用的地方)将它们指定给单个艺术家?我想每个艺术家只有 5 个人。

所以基本上;我需要一个基于组的权限系统,它也允许基于用户的权限。

写感觉就像我需要 ACL,但我不能制作如下资源:can_edit_u2、can_edit_bonjovi、can_edit_thebeatles.. 或者我可以吗?

4

1 回答 1

1

用表结构简单解释:

用户

id |    username    |
1  |    John        |
2  |    Michael     |

艺术家

id |    name        |
1  |    Bon Jovi    |
2  |    Beatles     |

可编辑

id |    artist_id   |    user_id    |
1  |    1           |    1          |
2  |    1           |    2          |
3  |    2           |    2          |

您的脚本逻辑应该像这样解释 - John 可以编辑 Bon Jovi,但 Michael 可以编辑 Bon Jovi 和 Beatles。

例如,如果 John 已登录,它应该使用其 user_id -> 存储会话变量$_SESSION['id'] = 1

然后用户将要编辑披头士。您的逻辑检查:

SELECT tb1.name, tb2.user_id
FROM artists AS tb1.
INNER JOIN can_edit as tb2
ON tb1.id = tb2.artist_id
WHERE tb1.name = 'Beatles'


name    |    user_id   |
Beatles |     2        |

所以你现在有一些代码可以在 PHP 中获取结果。

if ($_SESSION['id'] == $row['user_id']) {  // if the output of the session variable (1) is equal to the output of the query (2)
... // allow editing
}
else {
... // don't allow
}

在这个例子中 $_SESSION['id'] 不等于 $row['user_id'],所以它不会让 John 编辑 Beatles

于 2013-04-15T19:03:51.767 回答