跳转到主要内容

支持Django REST Framework的django-guardian

项目描述

django-rest-framework-guardian2

GitHub Actions License Version Python

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属性中。

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

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 (9.1 kB 查看散列值)

上传时间 源代码

构建分发

djangorestframework_guardian2-0.6.0-py3-none-any.whl (7.0 kB 查看散列值)

上传时间 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面