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, потому что в конечном итоге пользователь будет наследовать права от назначенных групп, и вы можете использовать группы для категоризации пользователей, если ваше намерение было просто использовать альтернативную модель роли пользователя.
Мой вопрос в том, какой метод подходит и почему? И если мы предпочтем первый метод, не нарушит ли это роль нормализации в концепциях баз данных, потому что у нас фактически нет таблицы разрешений. Это просто как применение разрешения виртуально, и нереально.
Спасибо