我正在开发一个网页应用程序,需要在多个客户的服务器上交付。该网站需要一个权限控制系统,以管理用户可以或不可以使用的区域和功能。
目前,我正在设计一个基于数据库的权限系统,将权限存储在数据库中。每个用户都有一个角色,角色定义了可用的权限列表。架构如下:
users 表
1. user_id
2. name
3. role_id
roles 表
1. role_id
2. name
permissions 表
1. permission_id
2. name
roles_permissions 表:
1. role_id
2. permission_id
在代码中,我会获取已登录用户的角色和权限,并检查用户是否能够执行操作或查看区域,如下所示:
hasPermission函数会检查用户是否拥有名为“Edit HR”的权限,并返回所需结果。问题在于,数据库表必须具有名称完全为“Edit HR”,而不是“Edit_hr”或“HR Editing”的权限记录。因此,我必须确保权限系统的数据在应用程序使用的每个数据库中都相同。这使我想到这是一个有缺陷的设计,需要重新设计。创建新的部分和功能也需要更新所有数据库,这让我感到非常沮丧。
因此,基本上问题是:如何最好地设计基于数据库的权限系统,并在多个数据库上保持数据库完整性?
目前,我正在设计一个基于数据库的权限系统,将权限存储在数据库中。每个用户都有一个角色,角色定义了可用的权限列表。架构如下:
users 表
1. user_id
2. name
3. role_id
roles 表
1. role_id
2. name
permissions 表
1. permission_id
2. name
roles_permissions 表:
1. role_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”的权限记录。因此,我必须确保权限系统的数据在应用程序使用的每个数据库中都相同。这使我想到这是一个有缺陷的设计,需要重新设计。创建新的部分和功能也需要更新所有数据库,这让我感到非常沮丧。
因此,基本上问题是:如何最好地设计基于数据库的权限系统,并在多个数据库上保持数据库完整性?