我有一个具有模型层次结构的应用程序,在该应用程序中,我需要基础对象具有与父对象相同的权限(不仅是其定义/代号,还包括每个用户和每个组的权限)。
Django-guardian似乎仅具有允许检查特定用户/组权限的功能。
是否有任何规范的方法可以将所有权限从一个对象克隆到另一个对象或强制继承?
没有强制强制继承权限的方法,也没有用于复制权限的内置函数。
在您的情况下,您可以简单地检查对父对象的权限?
或显式复制权限。由于这一次又一次地出现,为此我将自己设为一个函数:
from guardian.shortcuts import get_users_with_perms, assign_perm, get_groups_with_perms
def copy_permissions(old_object, new_object):
"""Copy user and group permissions from one object to another."""
for user, permissions in get_users_with_perms(old_object, attach_perms=True, with_group_users=False).items():
for permission in permissions:
assign_perm(permission, user, new_object)
for group, permissions in get_groups_with_perms(old_object, attach_perms=True).items():
for permission in permissions:
assign_perm(permission, group, new_object)