当前位置:   article > 正文

权限 - Permissions - 自定义_permission_classes = [isauthenticated]

permission_classes = [isauthenticated]

分类

权限控制可以限制用户对于视图的访问和对于具体数据对象的访问。

  • 在执行视图的dispatch()方法前,会先进行视图访问权限的判断
  • 在通过get_object()获取具体对象时,会进行对象访问权限的判断

提供的权限分类(不够用,就自定义)

  • AllowAny 允许所有用户
  • IsAuthenticated 仅通过认证的用户
  • IsAdminUser 仅管理员用户
  • IsAuthenticatedOrReadOnly 认证的用户可以完全操作,否则只能get读取(即没认证通过,但可以get)

设置(4种)

第一种:

settings.py中,全局设置,设置默认的权限管理类permission_classes:

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

第二种:

也可以在具体的视图中,通过permission_classes属性来设置(在当前视图设置的,等级是比全局设置要高的)

  1. from rest_framework.authentication import SessionAuthentication
  2. from rest_framework.permissions import IsAuthenticated
  3. from rest_framework.generics import RetrieveAPIView
  4. class BookDetailView(RetrieveAPIView):
  5. queryset = BookInfo.objects.all()
  6. serializer_class = BookInfoSerializer
  7. # 认证管理
  8. # 认证管理一般和权限管理配合使用
  9. authentication_classes = [SessionAuthentication] # 此视图,采用session认证
  10. permission_classes = [IsAuthenticated] # 权限是,必须通过了认证机制

第三种:

在项目中,未指明(未设置)permission_classes,则Django采用如下默认配置

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

第四种(重点):

自定义权限,需继承rest_framework.permissions.BasePermission父类,并实现以下两个任何一个方法或全部

注意:其实很简单,就是True还是False

方法1:

has_permission(self, request, view)

是否可以访问视图, view表示当前视图对象        => 对视图访问权限的自定义

方法2:

has_object_permission(self, request, view, obj)

是否可以访问数据对象, view表示当前视图, obj为数据对象     => 对该对象访问的权限自定义

例子:

  1. rest_framework.permissions import BasePermission
  2. class MyPermission(BasePermission):
  3. def has_object_permission(self, request, view, obj):
  4. """ 控制对obj对象的访问权限,此案例拒绝所有对数据对象的访问 """
  5. return False
  6. class BookInfoViewSet(ModelViewSet):
  7. queryset = BookInfo.objects.all()
  8. serializer_class = BookInfoSerializer
  9. # 即,即使认证通过了,但是不能对数据对象进行访问
  10. permission_classes = [IsAuthenticated, MyPermission]

 

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

闽ICP备14008679号