目前我正在从事的项目是一个web应用程序,它必须在自己的服务器上交付给多个客户。该网站需要一个权限控制系统,该系统将管理用户可以或不能使用的区域和功能。
至于知道,我正在设计一个数据库驱动的权限系统,其中的权限存储在数据库中.每个用户都有一个角色。该角色定义可用的列表权限。模式如下所示:
用户表
角色表
权限表
roles_permissions表:
在代码中,我将获取已记录的用户角色和权限,并检查用户是否能够执行操作或查看如下区域:
if($user->hasPermission('Edit HR')) {
// let user see the editing HR section
}hasPermission将检查用户是否具有名为“Edit HR”的权限,并返回所需的结果。我看到的问题是,数据库表必须有权限记录,其名称必须是“Edit HR”,而不是“Edit_hr”或“HR编辑”。因此,我必须确保应用程序使用的每个数据库的权限系统数据都是相同的。这让我觉得这是一个有缺陷的设计,需要重新设计。创建新的部分和特性也需要更新所有的数据库,这也使我成为一个可悲的熊猫。
因此,基本上,问题是:设计数据库驱动的权限系统并在多个数据库上保持数据库完整性的最佳方法是什么?
发布于 2012-06-05 16:45:29
你想出的计划看上去不错。我要添加的唯一内容是在permissions表中添加一个名为tag或类似的字段。
权限tag将类似于EDIT_HR,您将在代码中使用它作为引用,而不是它的name。只为显示目的使用name,例如HR Editing。这样就可以根据需要更改名称,并且不会影响您的代码。
发布于 2013-04-16 16:36:25
我使用的解决方案是拥有一个全局$current_user对象,该对象在创建时读取权限表,并存储对其有效的所有权限操作。然后,每当您需要检查操作时,都会搜索该数组。它保存了DB查询,尽管如果在全局对象中存储此类数据有安全含义,我还没有找到它。
只需要一个db表(示例):
user_id | user_role | user_action
---------------------------------
0 | 10 | view_dashboard
0 | 1 | view_users用户角色对应于最小用户类型(管理员、编辑器、访问者等)因此,具有user_role >= $current_user角色的所有操作都是可用的。user_id列允许您覆盖特定用户的某些级别。
有了这种设置,也很容易有一个页面列出所有权限,并允许用户使用简单的下拉列表修改值(但要确保不是每个用户都能这样做)。
https://stackoverflow.com/questions/10900867
复制相似问题