【发布时间】:2012-06-09 16:20:30
【问题描述】:
我正在处理的当前项目是一个 Web 应用程序,它必须在他们自己的服务器上交付给多个客户。该网站需要一个权限控制系统,该系统将管理用户可以或不可以使用的区域和功能。
据了解,我正在设计一个数据库驱动的权限系统,权限存储在数据库中。每个用户都有一个角色。该角色定义了可用的列表权限。架构如下所示:
用户表
1. user_id
2.名称
3.role_id
角色表
1. 角色ID
2.名字
权限表
1.permission_id
2.名字
roles_permissions 表:
1. 角色ID
2.permission_id
在代码中,我将获取登录用户的角色和权限,并检查用户是否能够执行操作或查看如下区域:
if($user->hasPermission('Edit HR')) {
// let user see the editing HR section
}
hasPermission 将检查用户是否拥有名为“Edit HR”的权限,并将返回所需的结果。我看到的问题是数据库表必须具有名称为“Edit HR”而不是“Edit_hr”或“HR Editing”的权限记录。所以我必须确保权限系统的数据对于应用程序使用的每个数据库都是相同的。哪一种让我觉得这是一个有缺陷的设计,需要重新设计。创建新的部分和功能还需要更新所有数据库,这也让我很伤心。
所以,基本上,问题是:设计数据库驱动的权限系统并在多个数据库上保持数据库完整性的最佳方法是什么?
【问题讨论】:
-
为了阐明设计,我将表称为
role、resource和permission。权限表将包括role_id和resource_id的外键,如果存在任何条目,则您知道该角色已连接到该资源。另外,我会将每个 PK 称为id,因为您已经拥有名为[table]_id的 FK。 -
用户只能拥有一个角色?一个类别的编辑和另一个类别的审稿人怎么样? :)
-
这很好,问题是当您混合角色、进程并且您需要解释用户是否需要向一个用户或用户组添加更多权限或仅排除一个用户的权限时,会你喜欢这个方案:stackoverflow.com/questions/37466333/…
标签: php permissions web