0

我目前正在设计一个需要使用用户权限和角色的 Web 应用程序。角色将存储在 SQL 数据库中(使用 MS SQL,但这应该是独立于实现的设计)。

允许用户拥有多个角色的标准做法是什么,如果你愿意的话,一个“一对多”的关系。

我在概念上想出的是一个 int 字段的想法,它使用一个位标志来确定用户是否具有该角色:

User Group | Permission Mask | Value
-------------------------------------
Basic      | 0 0 0 0 1       | 1
Advanced   | 0 0 0 1 0       | 2
...        |    ...          | ...
Admin      | 1 0 0 0 0       | 16

这样,在我的 PHP 端的身份验证中,我可以快速计算出用户是否属于该角色。我看到的最大缺点是可读性和理解性。对于不参与此设计决策的人,他们是否能够弄清楚当维护/升级(新角色)出现时发生了什么?

这适合我的需要吗?是否有更标准化的方式允许用户拥有多个角色/组?

4

2 回答 2

3
User
------------
Id
Name


Roles
-----------
Id
Name


UserRoles - the UserID,RoleID combination has to be unique
-----------
UserId,
RoleId


Groups
------------
Id
GroupName


UserGroups - UserID, GroupID combination has to be unique
--------------
UserId
GroupId

样本数据

UserRoles
----------------------------------------------
UserID  | RoleID
--------------------------
123       ADMIN
123       EDITOR
124       SITE-USER

查询

-- if no rows returned, then user does not belong to role
Select 1 From UserRoles Where UserID=123 AND RoleID='ADMIN'

-- get user roles
Select ur.ID, ur.Name From UserRoles ur
JOIN Role r ON ur.RoleID = r.RoleID
JOIN Users u ON ur.UserID = u.UserID
WHERE u.UserID = 123
于 2012-11-05T19:27:37.103 回答
1

你应该做一些简单的事情。这是一个*-*关系,为什么不在数据库中实现它呢?您只需要另外 2 个表来将这些角色映射到单个用户,您可以轻松添加新角色,这对潜在的新人来说很有意义。当然,您最初必须对角色访问功能进行硬编码,但是您将有一个更简单的升级路径,您是否希望整个事情都可配置。

于 2012-11-05T19:31:56.367 回答