0

我的应用程序中有产品和公司类。现在,我想让人们管理对某些公司具有 FK 的产品。例子:

公司有:Foo 和 Bar 产品有:Apple(由 Foo 生产,即 FK to it)、Pear and Plum(由 Bar 生产)

johndoe@email.com 是拥有 Foo 的用户,而 janedoe@email.com 是拥有 Bar 的用户。我想为 John 设置 privs 以便能够将产品添加到 Foo、删除它们并编辑它们,但仅限于与 Foo 相关的那些。

我该怎么做?

4

1 回答 1

1

我真的很喜欢 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,但通常定制的东西适用于更复杂的情况。

于 2013-01-05T05:17:46.343 回答