石墨烯场acl

graphene-acl的Python项目详细描述


石墨烯acl

这个库的目的是简化石墨烯场的访问控制保护。保护acl的一种常见方法是使用可重用的权限验证装饰器。问题是,对于使用标准解析器的石墨烯场来说,这很麻烦。您被迫编写一个不必要的解析器函数,以便用您的权限验证器对其进行注释。这个库解决的第二个麻烦问题是基于acl角色的解析器。根据用户角色的不同,您可能希望执行不同的业务逻辑,以便检索他们为Graphene字段请求的数据。

安装

$ pip install graphene-acl

用法

acl_分类器

分类器的目的是返回一个路由密钥,该密钥将用于确定哪个解析器函数用于解析字段。分类器函数可以访问字段解析器中的所有参数。

ACL验证器

验证器的目的是授权对字段的访问。此验证将在分类路由发生之前进行。如果每个分类路由的授权验证不同,则不应使用此验证器强制授权访问。相反,您应该在特定的分类器解析器定义处进行授权。

示例

fromgraphene_aclimportAclFieldimportgraphenedefclassifier(root,info,*args,**kwargs):if'admin'ininfo.context.jwt.permissions:return'admin'returnNonedefhas_permissions(permissions):defvalidator(root,info,*args,**kwars):if(any([permissionininfo.context.jwt.permissionsforpermissioninpermissions])):returnTrueraiseAuthorizationError(f'Not authorized to query field {info.field_name}')returnvalidatorclassFoo(graphene.ObjectType):private_name=AclField(graphene.String,acl_classifier=classifier)restricted_name=AclField(graphene.String,acl_validator=has_permissions(['foo:name:read','admin']))@Foo.private_name.resolve('admin')defresolve_private_name__admin(root,info,*args,**kwargs):pass@Foo.private_name.resolve()defresolve_private_name__default(root,info):# Alternatively, authorization handling could be done by an acl_validatorraiseError('Not Authorized')

ACL连接字段

fromgraphene_django.filterimportDjangoFilterConnectionFieldfromgraphene_aclimportacl_field_typeBarConnectionField=acl_field_type('BarConnectionField',DjangoFilterConnectionField)classFoo(graphene.ObjectType):bar=BarConnectionField(MyNode,acl_permissions=has_permission('FOO'))

开发

首次设置

  • 安装预调试挂钩
  • brew install pre-commit && pre-commit install && pre-commit install --install-hooks
  • 安装诗歌:https://github.com/sdispater/poetry#installation
  • curl -sSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py | python
  • 安装依赖项
  • poetry install

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java接口中的每个方法都是抽象的,但在抽象类中,我们也只能使用抽象方法   初始化Java中声明的、未初始化的变量会发生什么情况?   java BouncyCastle openPGP将字节[]数组加密为csv文件   在Java中将类A(和所有子类)映射到类B的实例的字典   RSA公钥编码,在Java和Android中,代码相同,结果不同   java在安卓中实现数字检测语音识别   java取消选择复选框   java如何在其他配置中重用Maven配置XML片段   java有没有一种有效的方法来检查HashMap是否包含映射到相同值的键?   spring处理程序调度失败;嵌套的例外是java。lang.NoClassDefFoundError:org/apache/http/client/HttpClient   带有ehcache的java多层缓存   java如何访问chromium(或任何其他浏览器)cookie   java通过将两个集合与spring data mongodb data中的条件合并来获取计数   安卓中R.java的语法错误