与身份认证和限制一起,权限决定了是否应该授予或拒绝访问请求;权限检查总是在视图的最开始运行,在任何其他代码被允许继续之前;权限用于授予或拒绝不同类别的用户访问 API 的不同部分
当权限检查失败时,将根据以下规则返回“403”或“401”响应:
1. 请求已成功通过身份验证,但权限被拒绝。— 将返回 HTTP 403 Forbidden 响应。
2. 请求未成功通过身份验证,并且最高优先级的身份验证类不使用WWW-Authenticate标头。— 将返回 HTTP 403 Forbidden 响应。
3. 请求未成功通过身份验证,并且最高优先级的身份验证类确实使用了WWW-Authenticate标头。—WWW-Authenticate将返回带有适当标头的 HTTP 401 未授权响应。
DRF四种权限
IsAuthenticated只有登录用户才能范文视图中的所有接口 AllowAny 允许所有用户 IsAdminUser 仅管理员用户 IsAuthenticatedOrReadOnly 认证的用户可以完全操作,否则只能get读取
DRF权限认证配置策略:全局配置和视图配置
全局权限认证
需要在setting.py文件夹中添加配置 - 配置后所有接口均要进行权限认证:
# DRF的所有配置项
REST_FRAMEWORK = {
# 全局权限认证
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated', # IsAuthenticated 仅通过登录认证的用户
'rest_framework.permissions.AllowAny', # AllowAny 允许所有用户
'rest_framework.permissions.IsAdminUser', # IsAdminUser 仅管理员用户
'rest_framework.permissions.IsAuthenticatedOrReadOnly', # IsAuthenticatedOrReadOnly 认证的用户可以完全操作,否则只能get读取
),
}
视图权限认证
只需要在需要权限认证的视图中配置,如下只有视图只有管理员账号才能请求该视图接口:
from rest_framework.generics import GenericAPIView
from rest_framework.viewsets import ModelViewSet
from rest_framework.authentication import TokenAuthentication
from rest_framework.permissions import IsAdminUser
from .models import BookInfo
from .serializers import BookInfoSerializers
class ViewAuth(ModelViewSet, GenericAPIView):
queryset = BookInfo.objects.all()
serializer_class = BookInfoSerializers
# 指定身份认证
authentication_classes = [TokenAuthentication, ]
# 指定当前视图访问权限:仅管理员用户
permission_classes = [IsAdminUser]
普通用户Token请求接口,HTTP返回401
管理员用户Token请求接口,HTTP返回200
提交评论
您尚未登录,登录之后方可评论~ 登录 or 注册