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

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

到目前为止我的一些想法:

  • 只需按帐户过滤每个查询
  • 用装饰器包装每个 View ,但是对于多个模型,我是否必须为每个模型创建不同的装饰器?我可以从装饰器中分辨出正在访问哪个模型吗?
  • 不知何故利用了 Auth 系统的 user_passes_test 装饰器,但同样,不同的模型。
  • 扩展身份验证系统以包含 request.account 属性
  • 为我的 View 创建一个新的 mixin?如果我不只使用 CBV 怎么办?
  • 不同的中间件?

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

    这不是一个代码问题,而是一个宏观的、最佳实践的问题。你会如何处理这个问题?

    最佳答案

    您请求的内容并不是那么奇特:这称为权限数据 - 您将用户与权限分开,每个权限都将拥有自己的数据。例如,您可能在一个组织中有多个部门——每个部门的数据只能由同一部门的成员进行编辑。我已经写了一篇博客文章,其中包含使用 django 的简单方法:

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

    回顾这篇文章,我建议只添加一个 Authority 模型,您的 User 将有一个 ForeignKey (每个 User 将有一个 Profile )。

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

    关于python - Django:多个账户,每个账户下有多个用户,但账户特定的数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20976182/

    10-14 15:29
    查看更多