如何有效地处理用户角色?

时间:2009-09-21 07:42:04

标签: php authentication

这有点含糊,所以这里的内容很丰富:

我见过执行以下任务之一的身份验证系统

  1. 为每个角色分别设置一个角色表,并为一个表中的所有用户提供单独的权限表
  2. 为管理员提供单独的表格
  3. 我知道,我错过了很多。但我真正想要的是:

    我应该如何在拥有多种用户且每种用户具有不同访问权限的网站中设计我的数据库?

    如果我决定使用其他类型的权限添加其他类型的用户,我将如何制作以使我的脚本足够灵活?

    我目前有一个User类,我打算创建扩展该User类的Administrator类。或者,当我将它们全部放在一个类中并且只是分配必要的权限时,这有点过分吗?

3 个答案:

答案 0 :(得分:3)

你可以有桌子 -

user (user_id, name ...)
permission (perm_id, name, desc)
role (role_id, title)
user_role (user_id, role_id)
user_permission (user_id, perm_id)
role_permission (role_id, perm_id)

这样,您可以根据需要在系统中拥有尽可能多的角色,并且您具有角色级权限和用户级权限。

答案 1 :(得分:2)

您可以添加额外的抽象级别。基本上,您在数据库中添加一个表来管理用户组,并为这些组分配组权限。不同的用户可以拥有多个组。

通过这种方式,您可以快速更改预定义规则集的权限,而无需单独更改每个用户。您也可以一次更改一组用户的权限

答案 2 :(得分:1)

我认为你需要在这里考虑几个概念。第一个是访问控制列表(ACL),然后第二个是身份验证。

在ACL中,您定义 resources ,它们是您要限制访问的对象和 roles ,它们是可以请求访问资源的对象。< / p>

我实施ACL的方式是使用Zend_Acl。我有一个名为user_roles

的表格
user_roles('user_role_id', 'name', 'permissions', 'parent_role_id')`

我还有一个名为user_role_maps的表,它将用户的ID映射到用户角色ID。 (你可以把它作为用户表上的一列,但这只取决于你对规范化的看法;-)。)然后我可以从这个表构造我的Zend_Acl对象然后,当用户通过身份验证时,我可以确定他们有权访问哪些资源以及他们可以对资源执行哪些操作。 (资源实现Zend_Acl_Resource_Interface,因此Zend_Acl可以将其识别为资源。

至于身份验证,这是一个更简单的概念(在我看来),您可能已经自己想出了某种形式的令牌匹配身份验证系统。关键方面是使用经过身份验证的用户ID来确定其角色。 Zend Framework还在Zend_Auth中为此提供了一个包。

我在这里使用了很多Zend Framework建议,其原因是它们的包对其他包的依赖性很小,因此插入组件非常简单。我确信其他框架提供了ACL包,如果你有时间和理解,你可以使用或推出自己的。

祝你好运。