django guardian对django rest框架的支持
djangorestframework-guardian的Python项目详细描述
django rest framework守护者
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'
权限。
同时使用ObjectPermissionsFilter
和DjangoObjectPermissions
的示例可能如下所示:
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 保留所有权利。
以源和二进制形式重新分配和使用,有无 如果满足以下条件,则允许修改:
重新发布源代码必须保留上述版权声明 条件列表和以下免责声明。
二进制形式的再分配必须复制上述版权声明, 文件中的条件列表和以下免责声明 和/或分发时提供的其他材料。
无论是版权所有者的名字还是 贡献者可用于支持或推广来自 本软件未经事先书面许可。
本软件由版权所有者和贡献者“按原样”提供。 以及任何明示或默示保证,包括但不限于 默示保证适销性和特定用途的保证 否认。在任何情况下,版权持有人或贡献者均不承担责任 对于任何直接的、间接的、偶然的、特殊的、惩戒性的或间接的 损害赔偿(包括但不限于购买替代货物或 但是 根据任何责任理论,无论是在合同中,严格责任, 或因使用而引起的侵权行为(包括疏忽或其他) 即使被告知有可能造成这种损害。