Django Auth:基于模型的类别的权限

时间:2013-01-05 04:59:06

标签: python django django-admin

我的应用中有产品和公司课程。现在,我想让人们向某些公司管理拥有FK的产品。例如:

公司是:Foo和Bar 产品有:Apple(由Foo生产,即FK生产),Pear和Plum(由Bar生产)

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

我该怎么做?

1 个答案:

答案 0 :(得分: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,但通常定制适用于更复杂的情况。