2014-01-07 90 views
2

在这里使用Django 1.5。我有一个我创建的应用程序,目前有一个大的数据集,如果你愿意的话,可以为一个“帐户”。这意味着我的应用程序中所有模型中的所有数据都可供所有登录用户使用。现在,我希望能够让更多的人使用我的应用程序,但使用他们自己的一组数据。所以我需要将用户分成不同的帐户,并为每个帐户设置不同的数据集。可能有一个或多个用户可以访问每个帐户。目前,我并不需要一个帐户中的不同用户具有不同的访问级别,但我打算让一个用户成为帐户“所有者”。Django:多帐户,每个帐户下有多个用户,但帐户特定的数据

enter image description here

我知道,要进行这种转换,我当然需要一个字段添加到每个模型的外键一个新的“账户”的模式。但除此之外,我有点模糊。这似乎是Django身份验证系统圆洞中的一个挂钩。所以问题是,最好的方法是什么?

的一点想法我有这么远:

  • 只需按帐户筛选每一个查询
  • 裹每一个装饰每一个观点,但有多个型号,我必须创建一个不同的每个模型的装饰者?我可以从装饰者中知道正在访问哪个模型?
  • 以某种方式使用Auth系统的user_passes_test修饰器,但再次使用不同的型号。
  • 将验证系统扩展为包含request.account属性
  • 为我的视图创建新的混合?如果我没有专门使用CBV,该怎么办?
  • 不同的中间件?

我考虑为每个帐户使用一个新组,然后按组进行过滤而不是新帐户模型,但我预测在这种情况下这将不太合适,因为它并未按照预期使用组。

这不是一个代码问题,而是更多的大图片,最佳实践问题。你会如何处理这个问题?

+0

我没有得到整个帐户/用户/数据分离的目标。你能更详细地描述它吗? – Alp

回答

2

你的请求并不那么奇特:这叫做权威数据 - 你把你的用户分配给权威机构,每个权威机构都有自己的数据。例如,您可能在组织中拥有多个部门 - 每个部门的数据只能由同一部门的成员编辑。我已经写了一个博客帖子有一个简单的方法,使用Django:

http://spapas.github.io/2013/11/05/django-authoritiy-data/

回顾一下后,我建议只增加一个Authority模型,你的User将有ForeignKey(每User将有一个Profile)。

现在,您的所有型号的数据将属于特定的Authorities将只包含ForeignKeyAuthority。要检查您可以使用CBV的权限 - django管理员将只能访问所有数据的中央管理员。我建议不要使用django权限来授权Authority数据。如果你想阅读更详细的帖子并在这里问任何问题。