django-guardian对Django REST Framework的支持
项目描述
django-rest-framework-guardian
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',
]
ObjectPermissionsFilter
该过滤器将确保查询集只返回用户具有适当查看权限的对象。
如果您正在使用ObjectPermissionsFilter
,您可能还需要添加一个适当的对象权限类,以确保用户只能操作具有适当对象权限的实例。最简单的方法是从DjangoObjectPermissions
派生并添加'view'
权限到perms_map
属性。
使用ObjectPermissionsFilter
和DjangoObjectPermissions
的示例可能如下所示
permissions.py:
from rest_framework import permissions
class CustomObjectPermissions(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:
from rest_framework import viewsets
from rest_framework_guardian import filters
from myapp.models import Event
from myapp.permissions import CustomObjectPermissions
from myapp.serializers import EventSerializer
class EventViewSet(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 = EventSerializer
permission_classes = [CustomObjectPermissions]
filter_backends = [filters.ObjectPermissionsFilter]
ObjectPermissionsAssignmentMixin
一个序列化混入模块,允许轻松地为用户和/或组分配权限。因此,每次创建或更新对象时,Serializer.get_permissions_map
返回的 permissions_map
都将用于为该对象分配权限。
请注意,现有的权限将保持不变。
一个使用示例可能如下所示
from rest_framework_guardian.serializers import ObjectPermissionsAssignmentMixin
from blog.models import Post
class PostSerializer(ObjectPermissionsAssignmentMixin, serializers.ModelSerializer):
class Meta:
model = Post
fields = '__all__'
def get_permissions_map(self, created):
current_user = self.context['request'].user
readers = 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/*
许可证
查看:许可证
BSD 3-Clause 许可证
版权所有(c)2018,Ryan P Kilby。保留所有权利。
在以下条件满足的情况下,允许以源代码和二进制形式重新分发和使用,无论是否修改:
-
源代码重新分发必须保留上述版权声明、本条件列表和以下免责声明。
-
二进制形式的重新分发必须复制上述版权声明、本条件列表和以下免责声明在文档和/或其他与分发一起提供的材料中。
-
未经事先书面许可,不得使用版权所有者的名称或其贡献者的名称来认可或推广源自本软件的产品。
本软件由版权所有者和贡献者提供“按原样”以及任何明示或暗示的保证,包括但不限于适销性和针对特定目的的适用性保证。在任何情况下,版权所有者或贡献者均不对任何直接、间接、偶然、特殊、示范性或后果性损害(包括但不限于替代商品或服务的采购;使用、数据或利润的损失;或业务中断)承担责任,无论是否已通知此类损害的可能性,无论损害是根据合同、严格责任还是侵权(包括疏忽或其他)提起的,无论损害是否与使用本软件有关。
项目详细信息
djangorestframework-guardian-0.3.0.tar.gz 的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | 1883756452d9bfcc2a51fb4e039a6837a8f6697c756447aa83af085749b59330 |
|
MD5 | 094e87bbeb9c28878636f5452980fd1e |
|
BLAKE2b-256 | e5800f2190bacfe7c7b2e22d0e1e695882ec3123f9e58817c8392a258cd46442 |
哈希值 用于 djangorestframework_guardian-0.3.0-py2.py3-none-any.whl
算法 | 散列摘要 | |
---|---|---|
SHA256 | 3bd3dd6ea58e1bceca5048faf6f8b1a93bb5dcff30ba5eb91b9a0e190a48a0c7 |
|
MD5 | e6c1c3eee9218838aa754b22527e2d65 |
|
BLAKE2b-256 | 9bcc35c1d8fb99172b2646f29e270e9ec443ffe09e0b63e61cd528d4fb4b8b07 |