简单的图形-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在ArrayList中比较数字   java在Kotlin中使异步调用同步   让“Scala编程”junit示例在IntelliJ中工作的java问题   java Servlet侦听器未在ContextListener中设置属性   将Microsoft SQL Server数据库连接到我的Java项目   加载资源时出现java“需要注册工厂”异常   java如何使用POI检查excel中的重复记录?   java如何更改机器生成的代码   java如何确保重写的方法是同步的   用Spring编写Hibernate时的java XML奥秘   java管理mysql数据库中存储的用户权限   java如何运行。来自Javascript的jar方法   java我想在Web应用程序中进行身份验证&对桌面应用程序使用相同的凭据。我该怎么做?