在数据行上存储用户权限

2024-03-28 14:05:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个表格,里面有不同实验的数据行。你知道吗

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后端。你知道吗


Tags: 数据django用户id数据库falsetrue权限
2条回答

我不是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,那么您只需使用默认值将它添加到新的交叉引用表中,所做的更改将被重新添加到您的系统中:-)

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

-以防在查询中使用此值 例如,您有两个选项来获取具有特定权限的用户

  • 创建一个bit masking数字字段,每个位都代表权限,您可以使用和/或获得所需的任何权限组合。
    • 优点:体积小,效率高
    • 缺点:实现复杂
    你知道吗
  • 为每个权限(您的解决方案)创建一个字段。
    • 优点:易于添加
    • 缺点:必须使用每个权限编辑模式
    你知道吗


-如果您不使用它进行任何查询,而是在代码中处理它,您可以将JSON转储到一列中,包括用户拥有的所有权限:

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

相关问题 更多 >