Клонировать все права доступа к объектам в 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)
Другие вопросы по тегам