【问题标题】:User permissions; JSON-string or DB Table?用户权限; JSON 字符串还是数据库表?
【发布时间】: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);

我个人倾向于后一种选择,主要原因有两个:

  1. 它是可扩展的
  2. 如果我们需要新的权限,它不需要我们修改数据库。

简而言之,这种应用程序的最佳方法是什么?

【问题讨论】:

  • 你认为你需要查询表来找出哪些用户可以访问某个模块吗?如果没有,我认为将权限保存为 JSON 字符串就可以了。但您可能希望确保它的大小不会呈指数增长。
  • 没有。我们不需要查询表来以这种方式查找用户的权限。我唯一担心的是 JSON 字符串的增长。

标签: php mysql json permissions


【解决方案1】:

我认为在这种情况下最好的解决方案是使用 NoSQL 数据库,例如 MongoDB - 这样您仍然可以保持可扩展性并利用 JSON 结构。

另一方面,根据您的user 表,您可以利用列类型索引并优化查询和读取请求,当然如果您使用的是规范化数据库。

仅当我想直接显示信息而不将其用于任何查询时,我个人才会将 JSON 存储在关系数据库中。就像您自己说的那样 - 总是有可能以巨大且不断增长的 JSON 字符串结束,这很可能会在某些时候造成麻烦。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    相关资源
    最近更新 更多