Как проверить групповые разрешения в представлении Django?

Я создал две группы group1 и group2 и назначил пользователей соответственно. Я обнаружил, что могу запретить доступ в шаблонах, используя

{% if perms.app1 %} // app1 is a app in project
///show something
{% endif %}

В приведенном выше коде я просто проверяю, есть ли у пользователя какое-либо разрешение, связанное с приложением, и если оно истинно, то оно отображается, а если ложно, то скрывается. Вот как это работает, я полагаю.

Теперь, как реализовать это на представлениях? Как просто указать имя приложения и проверить, есть ли у пользователя права на функции представления в view.py? Добавление списка разрешений не является хорошей практикой, я считаю, есть ли способ просто указать имя приложения для проверки разрешений?

У меня уже есть декоратор проверки роли :

def is_agent(login_url=None):
    actual_decorator = user_passes_test(lambda u: u.role == 1)
    
    if actual_decorator:
        return actual_decorator
    else:
        raise Http404

Так есть ли возможность добавить вещи в декоратор или как с этим справиться?

Вам необходимо определить group_required как декораторы:

def group_required(*groups):

    def decorator(function):
        def wrapper(request, *args, **kwargs):
            if request.user.groups.filter(name__in=groups).exists():
                return function(request, *args, **kwargs)
            raise PermissionDenied

        return wrapper

    return decorator
Вернуться на верх