支持Django REST Framework的django-guardian
项目描述
django-rest-framework-guardian2
django-rest-framework-guardian2提供django-guardian集成于Django REST Framework。
安装与设置
要使用django-rest-framework-guardian2,将其安装到您的环境中。
$ pip install djangorestframework-guardian2
确保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.cfg 中更新包版本
- 为版本创建 git 标签
- 构建并上传发布到 PyPI
$ rm -rf dist/ build/ $ pip install -U build twine $ python -m build $ twine upload -r test dist/* $ twine upload dist/*
许可证
查看:授权协议
BSD 3-Clause 许可协议
版权所有(c)2018,Ryan P Kilby 保留所有权利。
在满足以下条件的情况下,允许以源代码和二进制形式重新分发和使用,无论是否修改
-
源代码重新分发必须保留上述版权声明、本条件列表和以下免责声明。
-
二进制形式的重新分发必须在使用说明书中或与分发一起提供的其他材料中复制上述版权声明、本条件列表和以下免责声明。
-
未经具体事先书面许可,不得使用版权所有者或其贡献者的姓名来认可或推广由此软件派生的产品。
本软件由版权所有者和贡献者提供“按原样”以及任何明确或隐含的保证,包括但不限于适销性和针对特定目的的适用性保证。在任何情况下,版权所有者或贡献者均不对任何直接、间接、偶然、特殊、示范性或后果性损害(包括但不限于替代商品或服务的采购;使用、数据或利润的损失;或业务中断)承担责任,无论这种损害是否因使用本软件而引起,即使被告知本软件可能造成此类损害。
项目详情
djangorestframework-guardian2-0.6.0.tar.gz 的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | 208cea6c8060246445a52244343ea0d730ba2a3d3414c81f032668e63e706069 |
|
MD5 | 9613a85e39d87a128680aa5bd4fde93e |
|
BLAKE2b-256 | 87a73a9b6a5127fdd9be181845cb56890b4d80c8df8e47216c33e2d5457c2109 |
djangorestframework_guardian2-0.6.0-py3-none-any.whl 的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | 1a24f9961bac0c85f2cc136d6beaf114d1de016e7537c49af4aa65c3a869d5a3 |
|
MD5 | e052b5d453a69aec1f2503b1e5c88970 |
|
BLAKE2b-256 | 75b7e46aac40fa340d3dded406af19c93bb6e30ea04db786c3bf7ef27f6ffb49 |