Django:多个帐户,每个帐户下有多个用户,但帐户特定数据

时间:2014-01-07 15:59:03

标签: python django authentication

在这里使用Django 1.5。我有一个我创建的应用程序,目前有一个大的数据集,如果你愿意,可以用于一个“帐户”。这意味着我的应用程序中所有模型中的所有数据都可供所有登录用户使用。现在,我希望能够允许更多人使用我的应用程序,但使用自己的数据集。因此,我需要将用户分成不同的帐户,每个帐户包含不同的数据集。可能有一个或多个用户可以访问每个帐户。此时我不需要一个帐户中的不同用户具有不同的访问级别,但我确实打算让一个用户成为帐户“所有者”。

enter image description here

我知道要进行此转换,我当然需要为每个带有外键的模型添加一个字段到新的“帐户”模型。但除此之外,我有点模糊。这似乎是Django的auth系统的圆孔中的方形钉。所以问题是,最好的方法是什么?

到目前为止我有几点想法:

  • 只需按帐户
  • 过滤每个查询
  • 用装饰器包裹每个视图,但是对于多个模型,我是否必须为每个模型创建不同的装饰器?我可以在装饰器内告诉我正在访问哪个模型吗?
  • 以某种方式利用Auth系统的user_passes_test装饰器,但同样使用不同的模型。
  • 扩展auth系统以包含request.account属性
  • 为我的观点创建一个新的mixin?如果我不是专门使用CBV怎么办?
  • 不同的中间件?

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

这不是一个代码问题,而是一个大图片,最佳实践问题。你会怎么做到这一点?

1 个答案:

答案 0 :(得分:3)

您要求的内容并非如此异乎寻常:这称为权限数据 - 您将用户分配给权限,每个权限都拥有自己的数据。例如,您可能在组织中有多个部门 - 每个部门的数据只能由同一部门的成员编辑。我已经使用django编写了一篇博文,其中包含一个简单的方法:

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

要回顾一下这篇文章,我建议只添加一个Authority模型,UserForeignKey User Profile Authorities ForeignKey )。

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