DRF 权限
DRF 权限
确定你能不能访问某个接口
DRF提供的权限方案
-
class AllowAny(BasePermission): -
class IsAuthenticated(BasePermission): -
class IsAdminUser(BasePermission): -
class IsAuthenticatedOrReadOnly(BasePermission): -
class DjangoModelPermissions(BasePermission): -
class DjangoModelPermissionsOrAnonReadOnly(DjangoModelPermissions): -
class DjangoObjectPermissions(DjangoModelPermissions):
自定义权限
只有VIP用户才能访问
自定义一个权限类
class MyPermission(BasePermission):
message = '你不是VIP用户'
def has_permission(self, request, view):
# 在认证的时候获取到了用户,现在可以直接用
if request.user and request.user.type == 2:
return True
else:
return False
视图级别配置
class AuthorListView(ListCreateAPIView):
queryset = models.Author.objects.all()
serializer_class = AuthorModelSerializer
authentication_classes = [MyAuth, ]
permission_classes = [MyPermission, ]
全局级别配置
# 在settings.py中设置rest framework相关配置项
REST_FRAMEWORK = {
"DEFAULT_AUTHENTICATION_CLASSES": ["auth_app.utils.MyAuth", ],
"DEFAULT_PERMISSION_CLASSES": ["auth_app.utils.MyPermission", ]
}
源码分析
- 请求 ——》urls.py ——》as_view ——》APIView的dispatch方法——》执行
self.initial(request, *args, **kwargs)——》执行self.check_permissions(request)

- 获取权限类

- 获取权限类

- 循环执行权限类的 has_permission ,判断是否有权限


浙公网安备 33010602011771号