首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >网站权限系统的最佳实践

网站权限系统的最佳实践
EN

Stack Overflow用户
提问于 2012-06-05 16:10:33
回答 2查看 3.7K关注 0票数 5

目前我正在从事的项目是一个web应用程序,它必须在自己的服务器上交付给多个客户。该网站需要一个权限控制系统,该系统将管理用户可以或不能使用的区域和功能。

至于知道,我正在设计一个数据库驱动的权限系统,其中的权限存储在数据库中.每个用户都有一个角色。该角色定义可用的列表权限。模式如下所示:

用户

  1. user_id
  2. name
  3. role_id

角色

  1. role_id
  2. name

权限

  1. permission_id
  2. name

roles_permissions表:

  1. role_id
  2. permission_id

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

代码语言:javascript
复制
if($user->hasPermission('Edit HR')) {
  // let user see the editing HR section
}

hasPermission将检查用户是否具有名为“Edit HR”的权限,并返回所需的结果。我看到的问题是,数据库表必须有权限记录,其名称必须是“Edit HR”,而不是“Edit_hr”或“HR编辑”。因此,我必须确保应用程序使用的每个数据库的权限系统数据都是相同的。这让我觉得这是一个有缺陷的设计,需要重新设计。创建新的部分和特性也需要更新所有的数据库,这也使我成为一个可悲的熊猫。

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

EN

回答 2

Stack Overflow用户

发布于 2012-06-05 16:45:29

你想出的计划看上去不错。我要添加的唯一内容是在permissions表中添加一个名为tag或类似的字段。

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

票数 3
EN

Stack Overflow用户

发布于 2013-04-16 16:36:25

我使用的解决方案是拥有一个全局$current_user对象,该对象在创建时读取权限表,并存储对其有效的所有权限操作。然后,每当您需要检查操作时,都会搜索该数组。它保存了DB查询,尽管如果在全局对象中存储此类数据有安全含义,我还没有找到它。

只需要一个db表(示例):

代码语言:javascript
复制
user_id | user_role | user_action
---------------------------------
0       |   10      |   view_dashboard
0       |   1       |   view_users

用户角色对应于最小用户类型(管理员、编辑器、访问者等)因此,具有user_role >= $current_user角色的所有操作都是可用的。user_id列允许您覆盖特定用户的某些级别。

有了这种设置,也很容易有一个页面列出所有权限,并允许用户使用简单的下拉列表修改值(但要确保不是每个用户都能这样做)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10900867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档