网站用户的权限

时间:2009-02-20 00:36:07

标签: mysql permissions roles

我正在开发一个网站,每个用户都可以拥有多个角色/权限,例如基本登录,订购产品,管理其他用户等等。除此之外,还有商店,每个商店可以有多个用户管理它。每个商店也有自己的一组权限。

我很困惑自己,并且不确定如何最好地在数据库中表示这一点。现在我在想:

用户 角色 users_roles 商店 stores_users

但是,我是否还应该使用stores_roles和stores_users_roles表来跟踪商店的单独权限,还是应该将角色限制在单个“角色”表中?

我原本以为只有一个角色表,但那么在多个商店中有角色的用户呢?即,如果用户被赋予让我们说“存储产品更新”的角色,则需要一些方法来确定这涉及哪个商店。 stores_users_roles表可以通过拥有store_id字段来解决这个问题,因此用户可以为商店#42“存储产品更新”和“存储产品删除”,并且仅为商店#84存储“商品更新”。

我希望我在这里有意义。

修改

感谢所有人的信息。显然我有一些想法要做。这只是一个我正在研究的有趣项目,但RBAC一直是我想要更好理解的东西。

4 个答案:

答案 0 :(得分:2)

现在这可能很明显,但role based access control 很难。我的建议是,不要试着写自己的,除非你希望那一部分在你希望花费在“很酷的东西”上时占用。

有很多灵活的,经过全面测试的授权库实现了RBAC(有时被错误标记为ACL),我的建议是找到一个适合您的需求并使用它。除非你是个极客,否则不要重新发明轮子。

答案 1 :(得分:1)

在我看来,如果我有权在一组商店中执行某些角色,那么我可能会在每个商店中拥有相同的权限。因此,拥有单个角色表可能就足够了。所以“joe”可以做“存储产品更新”和“存储产品删除”,然后有一个user_stores表来列出他有权访问的商店。假设整个列表,他将在所有商店拥有相同的权限。

如果业务规则是他可以在一个商店中更新和删除,但只在另一个商店中更新,不删除,那么你将不得不变得更加复杂。

根据我的经验,你通常会被告知你需要很大的灵活性,然后一旦实施,没有人使用它。 GUI变得非常复杂,难以管理。

如果GUI确实变得复杂,我建议你从商店的角度来看待它,以及用户的观点。换句话说,不是选择用户,而是选择他们拥有的权限以及他们可以访问的商店,可能更容易首先选择商店,然后选择哪些用户可以访问哪些角色在那家商店。取决于我猜多少用户和多少商店。在过去的项目中,我发现比其他项目更容易做到。

答案 2 :(得分:1)

你的模特看起来不错。我认为您需要的唯一修改是关于角色的粒度。现在,你的角色只是一个操作。

但首先,您需要一个store_role表,一个联合表,用于解决角色和商店之间的多对多关系。也就是说,一个商店可以有很多角色,一个角色可以在很多商店完成。

例如:StoreA可以创建,更新,删除客户。和DELETE客户可以在StoreA,StoreB和StoreC中完成。

接下来,您可以自由地将用户关联到user_store_roles表中的store_role_id。

现在,user_store_role记录将包含user_id和store_role_id:

的集合

SELECT * FROM USER_STORE_ROLE WHERE user_id = @userID

返回所有商店中用户的所有允许操作。

对于特定商店中用户角色的集合,请执行上述到user_store表的内部联接,添加类似

的WHERE部分

其中STORE_ROLE.store_id = @storeID

答案 3 :(得分:0)

store_id放入user_roles表格中。

如果这是Rails,则用户模型将为have_many :stores, :through => :roles