存储数据行的用户权限

时间:2016-09-19 16:11:11

标签: python mysql django database sqlite

我有一张包含不同实验数据的表格。

experiment_id    data_1    data_2
-------------    ------    -------
      1
      2
      3
      4
     ..

我在django上有一个用户数据库,我想存储权限,指明哪些用户可以访问哪些行,然后只返回用户被授权的行。

我应该使用什么格式来存储权限?只是一个表格,每个用户都有一行,每个实验的列都有布尔值?在这种情况下,每次添加实验时我都必须在此表中添加一行?

user    experiment_1    experiment_2    experiment_3    ..
----    ------------    ------------    ------------    --
user_1     True             False          False        ..
user_2     False            True           False        ..
 ..

关于该主题的任何参考文献也都很棒,最好与sqlite3功能相关,因为那是我当前的db后端。

2 个答案:

答案 0 :(得分:0)

我并不是100%确定哪一项最适合您,但过去我发现使用以下解决方案是最容易查询和维护的。

Table: Experiment
Experiment_Id  |  data_1  |  data_2
-----------------------------------
 1             |  ...     |  ...
 2             |  ...     |  ...

Table: User
User_Name  | Password  | ...
----------------------------
 User1     | ...
 User2     | ...

Table: User_Experiment_Permissions
User_Name | Experiment | Can_Read | Can_Edit
--------------------------------------------
 User1    | 1          | true     | false
 User2    | 1          | false    | false
 User1    | 2          | true     | true
 User2    | 2          | true     | false

如您所见,在新表中我们引用了用户和实验。这使我们能够对用户和实验之间的关系进行细粒度控制。此外,如果此关系具有新的权限,例如can_delete,那么您可以使用默认值将其添加到新的交叉引用表中,并且更改将改装到您的系统中: - )

答案 1 :(得分:0)

这取决于您使用权限的方式。

  - 如果您将在查询中使用此值 例如,您有两个选项可以让具有特定权限的用户

  • 创建一个bit masking个数字字段,每个位都代表权限,您可以使用AND / OR来获取所需的任何权限组合。
    • 优势:体积小,效率高
    • 缺点:实施复杂
  • 为每个权限(您的解决方案)创建一个字段。
    • 优势:易于添加
    • 缺点:必须使用每个权限编辑架构


  - 如果您不将它用于任何查询并将在代码处理它,您只需将 JSON 转储到一个列中,包括用户喜欢的所有权限:

{"experiment_1": 1, "experiment_2": 0, "experiment_3": 1}