我的应用程序中有产品和公司类。现在,我想让人们管理对某些公司具有 FK 的产品。例子:
公司有:Foo 和 Bar 产品有:Apple(由 Foo 生产,即 FK to it)、Pear and Plum(由 Bar 生产)
johndoe@email.com 是拥有 Foo 的用户,而 janedoe@email.com 是拥有 Bar 的用户。我想为 John 设置 privs 以便能够将产品添加到 Foo、删除它们并编辑它们,但仅限于与 Foo 相关的那些。
我该怎么做?
我的应用程序中有产品和公司类。现在,我想让人们管理对某些公司具有 FK 的产品。例子:
公司有:Foo 和 Bar 产品有:Apple(由 Foo 生产,即 FK to it)、Pear and Plum(由 Bar 生产)
johndoe@email.com 是拥有 Foo 的用户,而 janedoe@email.com 是拥有 Bar 的用户。我想为 John 设置 privs 以便能够将产品添加到 Foo、删除它们并编辑它们,但仅限于与 Foo 相关的那些。
我该怎么做?
我真的很喜欢 django-guardian (https://github.com/lukaszb/django-guardian.git) 这种东西。它为 Django 提供对象级权限。
我将解决您的具体问题的方式如下。
定义允许公司所有者完成的操作
class Meta:
permissions = [('can_add', 'Add product to company'), etc...]
接下来,通过添加到 save() 中,我将为创建新公司的每个公司创建一个组。
def save():
# Create a permission group named %s_group % company_name
# assign(permission, group) - add the permissions to this group.
此时,对于您的示例,您将拥有 Foo_group 和 Bar_group,以及分配给组的这些对象的权限。
现在您剩下要做的就是从不同的公司组添加/删除用户,以授予他们与这些对象关联的权限。
最后一个组件是检查相关操作的权限。这可以在每个动作的适当视图中完成,例如。添加、删除等
我更喜欢基于类的视图,因为使用 Mixins 进行权限检查非常好。Guardian 带有一个开箱即用的 PermissionRequiredMixin,但通常定制的东西适用于更复杂的情况。