我的应用中有产品和公司课程。现在,我想让人们向某些公司管理拥有FK的产品。例如:
公司是:Foo和Bar 产品有:Apple(由Foo生产,即FK生产),Pear和Plum(由Bar生产)
johndoe@email.com是拥有Foo的用户,janedoe @ email.com是拥有Bar的用户。我想为John设置权限,以便能够将产品添加到Foo,删除它们并编辑它们,但只有那些与Foo相关的产品。
我该怎么做?
答案 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,但通常定制适用于更复杂的情况。