将 RoleNeed 与 Flask Principal 相结合
Combining RoleNeed's with Flask Principal
我正在尝试创建一个权限,要求用户具有角色 A 或角色 B。
根据 Python Flask Principal 文档,以下行创建了一个权限,要求用户具有角色 A 和角色 B。
combined_permission = Permission(RoleNeed('roleA'), RoleNeed('roleB'))
您知道如何创建依赖于 OR 而不是 AND 的权限吗?
按照目前的情况,需要使用 OR
检查组合权限的需求。引用自 the documentation:
class flask_principal.Permission(*needs)
Represents needs, any of which must be present to access a resource
如果您想要 AND
,只需将 Permission
class 子 class 并覆盖 the allows
method 即可检查集合的交集和一开始的权限需求一样:
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
我正在尝试创建一个权限,要求用户具有角色 A 或角色 B。
根据 Python Flask Principal 文档,以下行创建了一个权限,要求用户具有角色 A 和角色 B。
combined_permission = Permission(RoleNeed('roleA'), RoleNeed('roleB'))
您知道如何创建依赖于 OR 而不是 AND 的权限吗?
按照目前的情况,需要使用 OR
检查组合权限的需求。引用自 the documentation:
class flask_principal.Permission(*needs)
Represents needs, any of which must be present to access a resource
如果您想要 AND
,只需将 Permission
class 子 class 并覆盖 the allows
method 即可检查集合的交集和一开始的权限需求一样:
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