结合RoleNeed's和FlaskPrinci

2024-09-24 22:18:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个权限,该权限要求用户具有角色a或角色B

根据Python Flask Principal文档,下面一行创建了一个权限,该权限要求用户具有roleA和roleB。在

combined_permission = Permission(RoleNeed('roleA'), RoleNeed('roleB'))

你知道如何创建一个依赖于或而不是和的权限吗?在


Tags: 用户文档principal权限角色flaskpermissioncombined
1条回答
网友
1楼 · 发布于 2024-09-24 22:18:02

按照目前的情况,使用OR检查组合权限的需要。引自the documentation

class flask_principal.Permission(*needs)
Represents needs, any of which must be present to access a resource

如果您想要一个AND,只需将Permission类子类并重写the ^{} 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

相关问题 更多 >