Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 设计帮助:多用户角色_Php_Sql_Authentication_Permissions - Fatal编程技术网

Php 设计帮助:多用户角色

Php 设计帮助:多用户角色,php,sql,authentication,permissions,Php,Sql,Authentication,Permissions,我目前正在设计一个需要使用用户权限和角色的web应用程序。角色将存储在SQL数据库中(使用MS SQL,但这应该是独立于实现的设计) 允许用户拥有多个角色的标准做法是什么?如果愿意,可以是“一对多”关系 从概念上讲,我想到的是一个int字段,它使用一个位标志来确定用户是否具有该角色: User Group | Permission Mask | Value ------------------------------------- Basic | 0 0 0 0 1 | 1

我目前正在设计一个需要使用用户权限和角色的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端的身份验证中,我可以快速计算出用户是否属于该角色。我看到的最大缺点是可读性和理解力。对于未参与此设计决策的人员,他们是否能够了解在出现维护/升级(新角色)时会发生什么

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

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
询问 样本数据

UserRoles
----------------------------------------------
UserID  | RoleID
--------------------------
123       ADMIN
123       EDITOR
124       SITE-USER
询问
你应该做些简单的事。这是一种
*-*
关系,为什么不在数据库中以这种方式实现呢?您只需要另外两个表就可以将这些角色映射到单个用户,您可以轻松添加新角色,这对于潜在的新用户来说是有意义的。当然,您最初必须硬编码角色访问功能,但您将有一个更简单的升级路径,您是否希望整个功能都可配置。

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

那么,随着SQL方面的复杂性增加,从web开发的角度来看,我希望做什么样的腿部工作?看起来我要做更多的匹配和布尔逻辑来确定角色,还是只需要定义更复杂的查询?这就是规范化数据库-查询不是complex@codingbiz事实上,它使您的查询更容易!他们都将是这种结构的简短的一行,这似乎是共识。我将使用这种方法。感谢您提供的详细信息和示例。这就是我在回答中的意思。那么,从web开发的角度来看,随着SQL方面的复杂性增加,我希望做什么样的腿部工作呢?看起来我要做更多的匹配和布尔逻辑来确定角色,还是只需要定义更复杂的查询?这就是规范化数据库-查询不是complex@codingbiz事实上,它使您的查询更容易!他们都将是这种结构的简短的一行,这似乎是共识。我将使用这种方法。谢谢你提供的细节和例子。这就是我在回答中的意思。