这里使用 Django 1.5。我创建了一个应用程序,当前拥有一大组数据,如果您愿意的话,可以用于一个“帐户”。这意味着我的应用程序中所有模型中的所有数据都可供所有登录用户使用。现在,我希望能够让更多的人使用我的应用程序,但使用他们自己的数据集。因此,我需要将用户分为不同的帐户,每个帐户具有不同的数据集。可能有一个或多个用户有权访问每个帐户。目前,我不需要一个帐户中的不同用户具有不同级别的访问权限,尽管我确实打算让一个用户成为帐户“所有者”。
我知道,为了进行这种转换,我当然需要向每个模型添加一个字段,并使用新的“帐户”模型的外键。但除此之外我还有点迷茫。这似乎是 Django 身份验证系统圆孔中的一个方钉。所以问题是,最好的方法是什么?
到目前为止我有一些想法:
- 只需按帐户过滤每个查询
- 用装饰器包装每个视图,但是对于多个模型,我是否必须为每个模型创建不同的装饰器?我可以从装饰器内部判断正在访问哪个模型吗?
- 以某种方式利用 Auth 系统的
user_passes_test
装饰器,但同样,不同的模型。
- 扩展身份验证系统以包括
request.account
属性
- 为我的视图创建一个新的 mixin?如果我不只使用 CBV 怎么办?
- 不同的中间件?
我考虑为每个帐户使用一个新组,然后按组而不是新帐户模型进行过滤,但我预测这在这种情况下不太适合,因为它没有按预期使用组。
这不是一个代码问题,而是一个全局、最佳实践的问题。你会如何处理这个问题?
你要求的并不是那么奇特:这就是所谓的权威数据- 您将用户与权限分开,每个权限都有自己的数据。例如,您的组织中可能有多个部门 - 每个部门的数据只能由同一部门的成员编辑。我已经写了一篇博客文章,其中包含使用 django 的简单方法:
http://spapas.github.io/2013/11/05/django-authoritiy-data/ http://spapas.github.io/2013/11/05/django-authoritiy-data/
回顾一下这篇文章,我建议只添加一个Authority
您的型号User
将有一个ForeignKey
(each User
将有一个Profile
).
现在,所有数据属于特定的模型Authorities
将只包含一个ForeignKey
to Authority
。要检查权限,您可以使用 CBV - django 管理员仅可供有权访问所有数据的中央管理员使用。我建议不要使用 django 权限进行授权Authority
数据。如果您想阅读更详细的帖子,并在此处提出任何问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)