php - 网站权限系统最佳实践

标签 php permissions web

我目前正在进行的项目是一个 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/

相关文章:

php - 使用 PHP 复制图像

php - Mysql选择特定id后的列表

php - MySQL 来自远程表的条件分组

php - 如果使用 PHP SQL 查询为空,则显示一条消息

php - 如何从不同的目录中 require_once?

java - 无法让android权限请求对话框出现

windows - 我应该将临时文件写入临时目录吗?或者将临时文件写入最终目录?

web - 托管您网站的几乎重复的 'test' 版本,而不会遭受 SEO 后果?

java - Spring Boot - 忽略属性 server.contextPath

sql - 仅当项目属于所有者时才插入序列