我目前正在设计一个需要使用用户权限和角色的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方面的身份验证中,我可以快速计算出用户是否属于该角色。我看到的最大缺点是可读性和理解力。对于没有参与此设计决策的人,他们能够弄清楚维护/升级(新角色)出现时会发生什么吗?
这是否适合我的需要?是否有更标准化的方式允许用户拥有多个角色/组?
答案 0 :(得分: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
答案 1 :(得分:1)
你应该做一些简单的事情。这是*-*
关系,为什么不在数据库中以这种方式实现呢?您只需要2个表来将这些角色映射到单个用户,您可以轻松添加新角色,这对于潜在的新手来说是有意义的。当然,您最初必须对角色访问功能进行硬编码,但是您可以拥有更简单的升级路径,是否希望整个事情都可以配置。