Сочетание RoleNeed с опорой Flask
Я пытаюсь создать разрешение, которое требует, чтобы у пользователя была роль A или роль B.
Согласно документации https://pythonhosted.org/Flask-Principal/, следующая строка создает разрешение, которое требует от пользователя роли A И роль B.
combined_permission = Permission(RoleNeed('roleA'), RoleNeed('roleB'))
Знаете ли вы, как создать разрешение, используя OR вместо AND?
1 ответ
Решение
В настоящее время потребности в совместном разрешении проверяются с помощью OR
, Цитирование из документации:
класс flask_principal.Разрешение(*необходимо)
Представляет потребности, любые из которых должны присутствовать для доступа к ресурсу
Если вы хотите AND
вместо этого просто подкласс Permission
класс и переопределить allows
Метод проверки того, что пересечение множеств совпадает с потребностями разрешения в первую очередь:
class RequiresAll(Permission):
def allows(self, identity):
if not has_all(self.needs, identity.provides):
return False
if self.excludes and self.excludes.intersection(identity.provides):
return False
return True
def has_all(needed=None, provided=None):
if needed is None:
return True
if provided is None:
provided = set()
shared = needed.intersection(provided)
return shared == needed