django guardian对django rest框架的支持

djangorestframework-guardian的Python项目详细描述


django rest framework守护者

CircleCICodecovLicenseVersionPython

django rest framework guardian为django rest framework提供django guardian集成。 目前,这只包括ObjectPermissionsFilter

安装和设置

要使用django rest framework guardian,请将其安装到您的环境中。

$ pip install djangorestframework-guardian

确保django rest framework和django guardian都已配置并添加到您的INSTALLED_APPS设置中。

INSTALLED_APPS=['rest_framework','guardian',]AUTHENTICATION_BACKENDS=['django.contrib.auth.backends.ModelBackend','guardian.backends.ObjectPermissionBackend',]

对象权限筛选器

过滤器将确保QuerySets只返回用户具有相应查看权限的对象。

如果您使用的是ObjectPermissionsFilter,则可能还需要添加适当的对象权限 类,以确保用户只有在具有适当的对象权限时才能对实例进行操作。最容易 方法是对DjangoObjectPermissions进行子类划分,并向perms_map属性添加'view'权限。

同时使用ObjectPermissionsFilterDjangoObjectPermissions的示例可能如下所示:

permissions.py

fromrest_frameworkimportpermissionsclassCustomObjectPermissions(permissions.DjangoObjectPermissions):"""    Similar to `DjangoObjectPermissions`, but adding 'view' permissions.    """perms_map={'GET':['%(app_label)s.view_%(model_name)s'],'OPTIONS':['%(app_label)s.view_%(model_name)s'],'HEAD':['%(app_label)s.view_%(model_name)s'],'POST':['%(app_label)s.add_%(model_name)s'],'PUT':['%(app_label)s.change_%(model_name)s'],'PATCH':['%(app_label)s.change_%(model_name)s'],'DELETE':['%(app_label)s.delete_%(model_name)s'],}

views.py

fromrest_frameworkimportviewsetsfromrest_framework_guardianimportfiltersfrommyapp.modelsimportEventfrommyapp.permissionsimportCustomObjectPermissionsfrommyapp.serializersimportEventSerializerclassEventViewSet(viewsets.ModelViewSet):"""    Viewset that only lists events if user has 'view' permissions, and only    allows operations on individual events if user has appropriate 'view', 'add',    'change' or 'delete' permissions.    """queryset=Event.objects.all()serializer_class=EventSerializerpermission_classes=[CustomObjectPermissions]filter_backends=[filters.ObjectPermissionsFilter]
< H2>

序列化MIXIN,允许权限很容易分配给用户和/或组。 因此,每次创建或更新对象时,由Serializer.get_permissions_map返回的permissions_map都将用于为该对象分配权限。

请注意,现有权限将保持完整。

用法示例如下:

fromrest_framework_guardian.serializersimportObjectPermissionsAssignmentMixinfromblog.modelsimportPostclassPostSerializer(ObjectPermissionsAssignmentMixin,serializers.ModelSerializer):classMeta:model=Postfields='__all__'defget_permissions_map(self,created):current_user=self.context['request'].userreaders=Group.objects.get(name='readers')supervisors=Group.objects.get(name='supervisors')return{'view_post':[current_user,readers],'change_post':[current_user],'delete_post':[current_user,supervisors]}

释放过程

  • 更新更改日志
  • 在setup.py中更新包版本
  • 为版本创建git标记
  • 生成并将版本上载到PYPI
    $ pip install -U pip setuptools wheel twine
    $ rm -rf dist/ build/
    $ python setup.py bdist_wheel
    $ twine upload dist/*
    

许可证

见:LICENSE

BSD 3条款许可证

版权所有(c)2018,Ryan P Kilby 保留所有权利。

以源和二进制形式重新分配和使用,有无 如果满足以下条件,则允许修改:

  • 重新发布源代码必须保留上述版权声明 条件列表和以下免责声明。

  • 二进制形式的再分配必须复制上述版权声明, 文件中的条件列表和以下免责声明 和/或分发时提供的其他材料。

  • 无论是版权所有者的名字还是 贡献者可用于支持或推广来自 本软件未经事先书面许可。

本软件由版权所有者和贡献者“按原样”提供。 以及任何明示或默示保证,包括但不限于 默示保证适销性和特定用途的保证 否认。在任何情况下,版权持有人或贡献者均不承担责任 对于任何直接的、间接的、偶然的、特殊的、惩戒性的或间接的 损害赔偿(包括但不限于购买替代货物或 但是 根据任何责任理论,无论是在合同中,严格责任, 或因使用而引起的侵权行为(包括疏忽或其他) 即使被告知有可能造成这种损害。

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

推荐PyPI第三方库


热门话题
java未从Facebook OAuth接收名字、姓氏和姓氏   我自己代码中的java ConcurrentModificationException   java在Android上获得单像素TIFF图像   java图形输出中的swing集成弹出窗口“通知”   将数据库表中的所有数据集插入jTable Java   java如何使用Hibernate获取不完整的集合?   打印无法从java连接到打印机   java使用分隔符拆分带引号的字符串   java Axis2禁用严格验证(wsdl2java中的Eosv)允许什么,如何使其更加严格?   java有人能帮我处理循环代码吗   java将JsonObject数组转换为整数   JavaXWiki扩展:检测事件空间创建   java如何设置图表的文本方向以使用poi旋转所有文本?   eche RecyclerView项的java Set自定义字体   java单元测试带有私有构造函数的spring组件,无需注入   用户界面如何在java中动态显示一组多个元素?   如何从java应用程序调用IDL(交互式数据语言)?   Java的内置库实现