当前位置:   article > 正文

权限Permissions_@permissionclass

@permissionclass

身份验证或身份识别本身通常不足以获取信息或代码的访问权限。因此,请求访问的实体必须具有授权

如何确定权限

        REST框架中的权限始终被定义为一个权限类的列表。

        在运行视图的主体之前,检查列表中的每个权限。 如果任何权限检查失败,会抛出一个exceptions.PermissionDenied或                                exceptions.NotAuthenticated异常,并且视图的主体将不会运行

        当权限检查失败时,将返回"403 Forbidden"或"401 Unauthorized"响应,具体根据以下规则:

  •         请求已成功通过身份验证,但权限被拒绝。 — 将返回403 Forbidden响应。
  •         请求未成功认证,最高优先级的认证类不使用WWW-Authenticate标头。— 将返回403 Forbidden响应。
  •         请求未成功认证,最高优先级的认证类使用WWW-Authenticate标头。— 将返回HTTP 401未经授权的响应,并附带适当的WWW-Authenticate标头。

设置权限策略

         全局配置(默认),在setting.py文件中配置

  1. REST_FRAMEWORK = {
  2. 'DEFAULT_PERMISSION_CLASSES': (
  3. 'rest_framework.permissions.IsAuthenticated',
  4. )
  5. }

        如果未指定,则此设置默认为允许无限制访问

  1. 'DEFAULT_PERMISSION_CLASSES': (
  2. 'rest_framework.permissions.AllowAny',
  3. )

        使用基于APIView类的视图在每个视图或每个视图集的基础上设置身份验证策略。 

  1. from rest_framework.permissions import IsAuthenticated
  2. from rest_framework.views import APIView
  3. class ExampleView(APIView):
  4. permission_classes = (IsAuthenticated,)

         使用@api_view装饰器装饰基于函数的视图

  1. from rest_framework.decorators import api_view, permission_classes
  2. from rest_framework.permissions import IsAuthenticated
  3. from rest_framework.response import Response
  4. @api_view(['GET'])
  5. @permission_classes((IsAuthenticated, ))

API参考

  •          AllowAny权限类将允许不受限制的访问,而不管该请求是否已通过身份验证或未经身份验证
  •         IsAuthenticated 权限类将拒绝任何未经身份验证的用户的权限,并允许其他权限,注册用户访问
  •         除非user.is_staffTrue,否则IsAdminUser权限类将拒绝任何用户的权限,只能被部分受信任的管理员访问
  •         IsAuthenticatedOrReadOnly 将允许经过身份验证的用户执行任何请求允许匿名用户读取权限,允许对已通过身份验证的用户进行写入权限
  •         DjangoModelPermissions只能应用于具有.queryset属性集的视图,只有在用户通过身份验证并分配了相关模型权限的情况下,才会被授予权限
  •         DjangoModelPermissionsOrAnonReadOnly 允许未经身份验证的用户具有对API的只读访问权限
  •         DjangoObjectPermissions权限只能应用于具有.queryset属性或.get_queryset()方法的视图。只有在用户通过身份验证并且具有相关的每个对象权限和相关的模型权限后,才会被授予权限。Django的标准对象权限框架相关联,该框架允许模型上的每个对象的权限,为了使用此权限类,你还需要添加支持对象级权限的权限后端,例如django-guardian。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/71644
推荐阅读
相关标签
  

闽ICP备14008679号