我目前正在进行的项目是一个 Web 应用程序,必须在他们自己的服务器上交付给多个客户。该网站需要一个权限控制系统,该系统将管理用户可以或不可以使用的区域和功能。
至于知道,我正在设计一个数据库驱动的权限系统,权限存储在数据库中。每个用户都有一个角色。该角色定义可用的列表权限。架构如下所示:
用户表
1. 用户名
2. 姓名
3.角色编号
角色表
1. role_id
2. 姓名
权限表
1. permission_id
2. 姓名
roles_permissions表:
1. role_id
2.权限编号
在代码中,我会获取登录用户的角色和权限,并检查用户是否能够执行操作或查看区域,如下所示:
if($user->hasPermission('Edit HR')) {
// let user see the editing HR section
}
hasPermission 将检查用户是否具有名称为“编辑 HR”的权限,并将返回所需的结果。我看到的问题是数据库表必须具有名称恰好是“Edit HR”而不是“Edit_hr”或“HR Editing”的权限记录。所以我必须确保权限系统的数据对于应用程序正在使用的每个数据库都是相同的。哪一种让我认为这是一个有缺陷的设计,需要重新设计。创建新的部分和功能还需要更新所有数据库,这也让我感到悲伤。
所以,基本上,问题是:设计数据库驱动的权限系统并在多个数据库上保持数据库完整性的最佳方法是什么?
最佳答案
您提出的方案看起来不错。我唯一要添加的是在 permissions
表上,我会添加一个名为 tag
或类似的字段。
权限 tag
类似于 EDIT_HR
,您可以在代码中使用它作为引用,而不是它的 name
。使用 name
仅用于显示目的,例如 HR Editing
。这样,名称可以根据需要变化,并且不会影响您的代码。
关于php - 网站权限系统最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10900867/