简单的图形-Django许可系统

graphene-permissions的Python项目详细描述


石墨烯权限

Graphene Django应用程序的权限系统。

Build StatusPyPI versionPython 3.6codecovMaintainability

概述

drf启发的基于graphene-django类的权限系统。允许轻松自定义权限类 用于查询和突变。

要求

  • Python3.5+
  • Django 2.0+
  • 石墨烯django 2.0+

安装

使用pip安装:

pip install graphene-permissions

示例

< P>强制执行权限系统,添加适当的MIIN和设置属性^ {CD1>}。

### models.pyfromdjango.dbimportmodelsclassPet(models.Model):name=models.CharField(max_length=32)race=models.CharField(max_length=64)
### schema.pyfromgrapheneimportrelayfromgraphene_djangoimportDjangoObjectTypefromgraphene_permissions.mixinsimportAuthNodefromgraphene_permissions.permissionsimportAllowAuthenticatedclassPetNode(AuthNode,DjangoObjectType):permission_classes=(AllowAuthenticated,)classMeta:model=Petfilter_fields=('name',)interfaces=(relay.Node,)

文档

设置权限检查

<查询>使用^ {< CD2>}并从^ {< CD3>}类继承。

classAllowAuthenticatedPetNode(AuthNode,DjangoObjectType):permission_classes=(AllowAuthenticated,)classMeta:model=Petfilter_fields=('name',)interfaces=(relay.Node,)classAllowAuthenticatedFilter(AuthFilter):permission_classes=(AllowAuthenticated,)classPetsQuery:user_pet=relay.Node.Field(AllowAuthenticatedPetNode)all_user_pets=AllowAuthenticatedFilter(AllowAuthenticatedPetNode)

突变使用^ {CD4>}MIXIN。

classAuthenticatedAddPet(AuthMutation,ClientIDMutation):permission_classes=(AllowAuthenticated,)pet=graphene.Field(AllowAuthenticatedPetNode)classInput:name=graphene.String()race=graphene.String()owner=graphene.ID()@classmethoddefmutate_and_get_payload(cls,root,info,**input):ifcls.has_permission(root,info,input):owner=User.objects.get(pk=from_global_id(input['owner'])[1])pet=Pet.objects.create(name=input['name'],race=input['race'],owner=owner)returnAuthenticatedAddPet(pet=pet)returnAuthenticatedAddPet(pet=None)classPetsMutation:authenticated_add_pet=AuthenticatedAddPet.Field()

自定义权限类

默认权限类是:AllowAnyAllowAuthenticatedAllowStaff。 您可以用一个类为查询和突变设置相等的权限,只需将这些类中的一个子类 若要限制对给定对象的访问,请重写相应的方法。如果应该给用户返回true 访问和false,如果被拒绝。

classAllowMutationForStaff(AllowAuthenticated):@staticmethoddefhas_node_permission(info,id):# logic here # return boolean@staticmethoddefhas_mutation_permission(root,info,input):ifinfo.request.user.is_staff:returnTruereturnFalse@staticmethoddefhas_filter_permission(info):# logic here# return boolean

多重权限

您可以设置多个权限检查,只需添加更多类。对每个类计算权限。 如果其中一个检查失败,则拒绝访问。

classCustomPetNode(AuthNode,DjangoObjectType):permission_classes=(AllowAuthenticated,AllowStaff,AllowCustom)classMeta:model=Petinterfaces=(relay.Node,)

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

推荐PyPI第三方库


热门话题
java如何在部署在Tomcat7上的jbpmconsole中添加新用户?   JavaStruts2:我分配了一个参数的值,但在jsp文件中得到了一个空指针错误   检查类是否在同一个包或子包中访问的java ArchUnit规则?   java当您使用spring forward重定向到其他控制器时,如何从ModelAndView返回响应对象?   java jsp/servlet,显示管理员、用户和未登录用户的不同链接   java Eclipse警告消息   java加载多纹理openGL   java有没有一种方法可以通过Hibernate传递一个对象(genaric)并填充任何字段,然后让它返回一个包含所有字段的对象列表?   java如何将git存储url连接到本地存储库,以便每次都获得更新的代码?   java无限循环在程序中无法正常工作   java File writer正在写入没有“换行”的字符串   java为什么Spring或C3p0没有清理C3p0线程?   java通过JDBC从PostgreSQL检索几何数组