2015-02-07 54 views
0

我有一个很多列的大型数据库表。类似这样的:django中数据库表的各个列的权限?

+------------+-------+-------+-----+--------+ 
| 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

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

如果权限可能非常独立,并且通常需要来自所有70列或其各种组合的数据,请将其保留在一个表中(以避免几十个联接)并包含您所描述的权限模型。

django.contrib.auth.permissions应该给你已经你需要:创建70权限对象,每列,和他们要么映射到单个用户或用户组(取决于你的个性的等级许可的载体)

+0

谢谢ascripter!我的情况绝对是你描述的第二个 - 高度细化的,用户特定的(或者至少它可能变得如此,所以我需要对它进行计划)。 – 2015-02-07 17:25:18