2009-09-21 54 views
4

还有点儿含糊所以这里的肉的东西:如何有效处理用户角色?

我所看到的认证系统,其执行以下

  1. 一个为每个角色单独的角色表,和一个单独的权限表,所有用户一个表
  2. 有管理员

一个单独的表有,我已经错过了很多,我知道了。但我试图真正要求的是:

我应该如何设计我的数据库在一个网站,我有很多种类的用户和每个访问不同?

如果我决定使用另一种类型的权限添加其他类型的用户,我将如何使它足够灵活?

我目前有一个用户类,并计划让我的管理员类扩展该用户类。或者,如果我可以将它们都放在一个类中,并且只需分配必要的权限,那么这有点矫枉过正?

回答

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) 

这样,根据您的需要,你可以在系统中尽可能多的角色,你有两个角色级别权限,用户级权限。

2

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

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

1

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

在ACL中,可以定义资源,这是要限制访问和角色,这是可以请求对资源的访问对象的对象。

我实现我的ACL的方式是使用Zend_Acl。我有一个表称为user_roles

user_roles('user_role_id', 'name', 'permissions', 'parent_role_id')` 

我也有一个表称为user_role_maps一个用户ID映射到用户角色ID。 (你可以把它作为用户表的一列,但这只取决于你对标准化的感受;-))然后我可以从这个表中构建我的Zend_Acl对象,然后当用户通过身份验证时,我可以确定他们有权访问哪些资源以及他们可以在资源上执行哪些操作。 (A资源实现Zend_Acl_Resource_Interface所以它是通过识别作为Zend_Acl资源。

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

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

祝你好运。

相关问题