【发布时间】:2014-02-19 10:19:39
【问题描述】:
我目前正在与一个中型团队合作,为大型客户开发自定义内容管理系统。 CMS 使用 PHP 编写并遵循 MVC 模式(自定义)。它是一个模块化系统,我们或其他开发人员可以在后期将插件添加到系统中。
系统将包含基于用户的权限,以及一系列具有预定义权限的通用角色。要求超级管理员用户也可以根据用户修改权限(例如,John Doe 可能被定义为普通用户,但具有修改内容的可能性)。
目前对于我们存储和处理这些权限的最佳方式存在分歧。一半的开发团队建议添加一个新的数据库表,该表将存储每个用户的键/值对和用户 ID,并在每条记录中存储布尔值。表结构是这样的:
user_ID: the ID of the user
perm_name: the name of the permission
perm_value: a boolean value dictating whether the user can carry out this action
建议是,如果与特定权限关联的值设置为0,或者表中不存在,则用户没有所需的权限。
开发团队的另一半倾向于将权限作为 JSON 编码字符串存储在 users 表中的单个字段中。例如,我们将为 John Doe 存储以下 JSON):
{
'modifyProducts': 1,
'addProducts': 1,
'addPages': 0
}
然后我们就可以在User 类中使用json_decode() 来提取权限,例如:
$this->permissions = json_decode($dbval);
我个人倾向于后一种选择,主要原因有两个:
- 它是可扩展的
- 如果我们需要新的权限,它不需要我们修改数据库。
简而言之,这种应用程序的最佳方法是什么?
【问题讨论】:
-
你认为你需要查询表来找出哪些用户可以访问某个模块吗?如果没有,我认为将权限保存为 JSON 字符串就可以了。但您可能希望确保它的大小不会呈指数增长。
-
没有。我们不需要查询表来以这种方式查找用户的权限。我唯一担心的是 JSON 字符串的增长。
标签: php mysql json permissions