Какой самый питонический способ проверить, имеет ли obj какое-либо разрешение из списка
Как в Django, так и в Django Guardian очень просто проверить, есть ли у пользователя разрешение:
user.has_perm('app.can_eat_pizzas')
Также легко проверить, имеет ли он все разрешения:
user.has_perms(('app.add_student', 'app.can_deliver_pizzas'))
Каким наиболее питоническим способом можно проверить, имеет ли пользователь любое разрешение?
Я знаю, что могу просто составить цепочку операторов if/or, но это кажется громоздким:
if user.has_perm('app.add_student') or user.has_perm('app.can_deliver_pizzas')
Вы можете получить все разрешения пользователя, используя user.user_permissions.all()
или вместе с user.user_permissions.all().count()
, проверяя длину объектов разрешений, если длина больше 0.
Есть другой способ проверить, есть ли у пользователя права в списке user.user_permissions.filter(pk__in=<list>)
perms = Permission.objects.filter(pk__in=list)
perms.user.all()
Либо вы можете получить пользователей на основе разрешений, либо отфильтровать список по разрешениям.
Надеюсь, это может помочь вам
Я бы сделал что-то вроде:
if any(user.has_perm(perm_name) for perm_name in permission_list):
# rest of code
(Использование generator
внутри any()
имеет дополнительное преимущество - прекращение проверки элементов списка после первой оценки True
)