网站权限系统的最佳实践

Rom*_*pak 5 php permissions web

我正在处理的当前项目是一个 Web 应用程序,必须在他们自己的服务器上将其交付给多个客户。该网站需要一个权限控制系统,该系统将管理用户可以或不可以使用的区域和功能。
至于知道,我正在设计一个数据库驱动的权限系统,权限存储在数据库中。每个用户都有一个角色。该角色定义了可用的列表权限。架构如下所示:

用户
1. user_id
2. 名称
3. role_id

角色
1. role_id
2. 名称

权限
1.permission_id
2.名称

roles_permissions表:
1. ROLE_ID
2. permission_id

在代码中,我将获取登录的用户角色和权限,并检查用户是否能够执行操作或查看区域,如下所示:

if($user->hasPermission('Edit HR')) {
  // let user see the editing HR section
}
Run Code Online (Sandbox Code Playgroud)

hasPermission 将检查用户是否具有名称为“Edit HR”的权限,并将返回所需的结果。我看到的问题是数据库表必须具有名称完全是“Edit HR”的权限记录,而不是“Edit_hr”或“HR Editing”。所以我必须确保权限系统的数据对于应用程序使用的每个数据库都是相同的。哪一种让我觉得这是一个有缺陷的设计,需要重新设计。创建新的部分和功能还需要更新所有数据库,这也让我感到难过。

所以,基本上,问题是:设计数据库驱动的权限系统并在多个数据库上保持数据库完整性的最佳方法是什么?

MrC*_*ode 3

你提出的方案看起来不错。我要添加的唯一内容是在permissions表上添加一个名为tag或类似的字段。

权限tag类似于EDIT_HR,您可以使用它作为代码中的引用,而不是它的namename例如,仅将其用于显示目的HR Editing。这样,名称可以根据需要而变化,并且不会影响您的代码。