对于我正在构建的应用程序,我需要某种权限系统。我想自己建造它。现在有几种选择。
我发现ACL有点超过顶部,基于角色只有在你知道你的资源和基于组的基础上才真正起作用,但是我有一个问题。
我有一个系统,其中用户可以编辑艺术家(即超级粉丝),所有对此有用的用户都会进入某种形式组/角色。但是我如何(这是动态部分发挥作用的地方)将他们任命为单身艺术家?我想每个艺术家只有5个人。
所以基本上; 我需要一个基于群组的权限系统,该系统也允许基于用户的权限。
写下感觉我需要ACL,但是我不能创建像:can_edit_u2,can_edit_bonjovi,can_edit_thebeatles ..或者我可以吗?
答案 0 :(得分:1)
简单解释表结构:
用户强>
id | username |
1 | John |
2 | Michael |
<强>艺术家强>
id | name |
1 | Bon Jovi |
2 | Beatles |
<强> can_edit 强>
id | artist_id | user_id |
1 | 1 | 1 |
2 | 1 | 2 |
3 | 2 | 2 |
你的脚本逻辑应该解释这个 - 约翰可以编辑Bon Jovi,但Michael可以编辑Bon Jovi和Beatles。
例如,如果John登录,它应该存储会话变量及其user_id - &gt; $_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