如何在PHP中创建动态权限系统

时间:2013-04-15 18:55:21

标签: php

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

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

我发现ACL有点超过顶部,基于角色只有在你知道你的资源和基于组的基础上才真正起作用,但是我有一个问题。

我有一个系统,其中用户可以编辑艺术家(即超级粉丝),所有对此有用的用户都会进入某种形式组/角色。但是我如何(这是动态部分发挥作用的地方)将他们任命为单身艺术家?我想每个艺术家只有5个人。

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

写下感觉我需要ACL,但是我不能创建像:can_edit_u2,can_edit_bonjovi,can_edit_thebeatles ..或者我可以吗?

1 个答案:

答案 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