将RoleNeed与Flask Principal结合起来

Der*_*rek 4 python permissions acl flask flask-principal

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

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

combined_permission = Permission(RoleNeed('roleA'), RoleNeed('roleB'))
Run Code Online (Sandbox Code Playgroud)

你知道怎么创建一个依赖OR而不是AND的权限吗?

Sea*_*ira 6

按照目前的情况,使用组合权限的需要进行检查OR.引用文档:

class flask_principal.权限(*needs)
表示访问资源时必须存在的任何需求

如果你想要一个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
Run Code Online (Sandbox Code Playgroud)