Клонировать все права доступа к объектам в django-Guardian / наследовать от ForeignKey
У меня есть приложение с иерархией моделей, в котором мне нужно, чтобы базовые объекты имели те же разрешения, что и родительский объект (не только их определения / кодовые имена, но также права для каждого пользователя и группы).
Кажется, что в Django-guardian есть только функции, позволяющие проверять определенные права пользователя / группы.
Есть ли канонический подход к клонированию всех разрешений от одного объекта к другому или форсированию наследования?
0 ответов
Невозможно принудительно наследовать разрешения, и нет встроенной функции для копирования разрешений.
В вашем случае вы можете просто проверить разрешения для родительского объекта?
Или скопируйте разрешения явно. Поскольку это повторяется снова и снова, я сделал себе функцию для этой цели:
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)