Framwork 权限
2019-11-16 本文已影响0人
夜醉梦紅尘
官方文档位置
image.png
关于权限的四个关键词
AllowAny
该AllowAny许可类将允许不受限制的访问,不管请求被认证或未认证的。
此权限不是严格要求的,因为您可以通过将空列表或元组用于权限设置来获得相同的结果,但是您可以发现指定该类很有用,因为它使意图明确。
IsAuthenticated
该IsAuthenticated许可类将拒绝允许任何未认证用户,并允许许可,否则。
如果您希望仅注册用户可以访问您的API,则此权限很合适。
IsAdminUser
所述IsAdminUser许可类将拒绝许可给任何用户,除非user.is_staff是True在这种情况下的许可将被允许。
如果只希望一部分受信任的管理员可以访问您的API,则此权限很合适。
IsAuthenticatedOrReadOnly
在IsAuthenticatedOrReadOnly将允许被授权的用户进行任何请求。仅当请求方法是“安全”方法之一时,才允许对未授权用户的请求;GET,HEAD或OPTIONS。
如果您希望您的API允许匿名用户具有读取权限,而只允许经过身份验证的用户具有写入权限,则此权限非常适合
自定义权限
DRF 运行我们自定义权限,可以实现更为灵活的权限校验。
要实现自定义权限,需要继承 BasePermission 并实现以下方法之一或两者:
.has_permission(self, request, view)
.has_object_permission(self, request, view, obj) 只针对获取当对象有效
比如,官方文档中的示例,可以实现只允许当前用户的拥有者修改指定的资源。
from rest_framework.permissions import IsAuthenticated
from rest_framework import permissions
class IsOwnerOrReadOnly(permissions.BasePermission):
message = 'Adding customers not allowed' #自定义错误信息
def has_object_permissions(self,request,view,obj):
return obj.username == request.user.username #返回布尔值
api 的url中
from rest_framework.routers import DefaultRouter
router = DefaultRouter()
router.register(r'user-all',drf_views.UsersViewSet)