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)

上一篇下一篇

猜你喜欢

热点阅读