Django, как установить разрешения на основе групп

Я работаю над проектом, в котором есть различные типы пользователей. Каждая группа пользователей должна иметь доступ к некоторым страницам и быть ограничена в доступе к другим страницам. Я видел различные решения для этого, например. Некоторые назначают пользователей определенным группам, а затем пишут пользовательские декораторы для ограничения доступа к страницам, например

def allowed_users(groups=[]):
    def decorator(view_func):
        def wrapper_func(request, *args, **kwargs):
            group = None

            if request.user.groups.exists():
                group = request.user.groups.all()[0].name
            if group in groups:
                return view_func(request, *args, **kwargs)
            else:
                return HttpResponse("You are not authorize to view this page ")
        
        return wrapper_func
    return decorator


@allowed_users(groups=["admin"])
def products(request):
    pass

и некоторые учебники и книги рекомендуют назначать пользователей на группы и затем давать разрешения каждой группе. например

admin_group.set.permissions([list_of_permissions])
admin_group.add.permissions(per1, per2, ...)

цитата, в которой говорится

Примечание: не проверяйте пользователей в группе, чтобы проверить, имеют ли пользователи права или нет, поэтому необходимо использовать has_perm, потому что в конечном итоге пользователь будет наследовать права от назначенных групп, и вы можете использовать группы для категоризации пользователей, если ваше намерение было просто использовать альтернативную модель роли пользователя.

Мой вопрос в том, какой метод подходит и почему? И если мы предпочтем первый метод, не нарушит ли это роль нормализации в концепциях баз данных, потому что у нас фактически нет таблицы разрешений. Это просто как применение разрешения виртуально, и нереально.

Спасибо

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