django中数据库表的各列的权限?

时间:2015-02-07 06:59:58

标签: django database django-models

我有一个包含许多列的大型数据库表。像这样:

+------------+-------+-------+-----+--------+
| postalcode | stat1 | stat2 | ... | stat70 |
+------------+-------+-------+-----+--------+
| V0A1A1     | 0.1   |    10 | ... |    100 |
| V0A1A2     | 0.4   |    20 | ... |    300 |
| V0A1A3     | 0.2   |    40 | ... |    200 |
| ....       | ...   |   ... | ... |    ... |
| Z9Z9Z9     | 0.3   |    30 | ... |    400 |
+------------+-------+-------+-----+--------+

我的django应用程序目前通过简单的SQL查询为所有用户提供访问所有列的权限。

我希望能够通过Django API访问数据,特别是我希望能够为特定用户授予表中某些列的权限,而不是其他列。

我应该如何处理django模型?

我应该使用相应的表格使每个列成为一个独特的模型吗?那将是很多模型,还有很多表格!

或者我应该为整个表创建一个模型吗?这将是很多领域!我将如何处理将用户链接到字段?

或者我不应该为表创建一个django模型,而是创建一个跟踪表列权限的元模型,并使用它来以某种方式将SQL查询调解到数据表?

+------+--------+------------+
| user | column | permission |
+------+--------+------------+
| 1    | stat1  | true       |
| 2    | stat1  | false      |
| 2    | stat2  | false      |
| 3    | stat1  | true       |
| 1    | stat3  | false      |
| ...  | ...    | ...        |
| 100  | stat70 | true       |
+------+--------+------------+

这似乎不是django-y。

我希望可能会有一个更清洁,更大的django解决方案,但它并没有发生在我身上。建议?

1 个答案:

答案 0 :(得分:1)

我认为最好的解决方案在很大程度上取决于"支离破碎"权限将是。如果只有少数用户组可以访问一组不同的列,则可以将这些列放入多个模型中。

如果权限可以是高度个性化的,并且您通常需要来自所有70列或其不同组合的数据,请将其保存在一个表中(也是为了避免数十个连接)并包含您所描述的权限模型。

django.contrib.auth.permissions应该已经为您提供了所需的内容:创建70个权限对象,每列一个,并将它们映射到单个用户或用户组(取决于您的权限向量的个性等级) )