Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django Auth:基于模型的类别的权限_Python_Django_Django Admin - Fatal编程技术网

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

Python Django Auth:基于模型的类别的权限,python,django,django-admin,Python,Django,Django Admin,我的应用程序中有产品和公司类。现在,我希望有人管理的产品,有FK的某些公司。例如: 公司有:福和巴 产品有:苹果(由Foo,ie.FK to it生产)、梨和李子(由Bar生产) johndoe@email.com用户是否拥有Foo,以及janedoe@email.com是一个用户拥有的酒吧。我想为John设置priv,以便能够将产品添加到Foo,删除并编辑它们,但仅限于与Foo相关的产品 我该怎么做呢?我真的很喜欢django guardian(https://github.com/lukas

我的应用程序中有产品和公司类。现在,我希望有人管理的产品,有FK的某些公司。例如:

公司有:福和巴 产品有:苹果(由Foo,ie.FK to it生产)、梨和李子(由Bar生产)

johndoe@email.com用户是否拥有Foo,以及janedoe@email.com是一个用户拥有的酒吧。我想为John设置priv,以便能够将产品添加到Foo,删除并编辑它们,但仅限于与Foo相关的产品


我该怎么做呢?

我真的很喜欢django guardian(https://github.com/lukaszb/django-guardian.git)对于这种东西。它为Django提供对象级权限

我处理您的具体问题的方法如下

定义允许公司所有者完成的操作

class Meta:
    permissions = [('can_add', 'Add product to company'), etc...]
接下来,我将通过添加到save()中,在创建新公司时为每个公司创建一个组

在这个示例中,您将拥有Foo_组和Bar_组,以及分配给这些组的那些对象的权限

现在,您所要做的就是从不同的公司组添加/删除用户,以授予他们与这些对象关联的权限

最后一个组件是检查相关操作的权限。这可以在每个操作的适当视图中完成,例如添加、删除等

我更喜欢基于类的视图,因为使用mixin进行权限检查非常好。Guardian附带了一个开箱即用的许可证RequiredMixin,但通常一些定制的东西适用于更复杂的情况

def save():
    # Create a permission group named %s_group % company_name
    # assign(permission, group) - add the permissions to this group.