DRF-自定义权限

rest_framework自带的权限

  • 引入
from rest_framework import permissions
  • permissions.AllowAny
    • 允许所有人访问
  • permissions.IsAuthenticated
    • 仅允许登录的人员访问
    • 判断条件是request.user and request.user.is_authenticated
  • permissions.IsAdminUser
    • 仅允许管理员访问
    • 判断条件是request.user and request.user.is_staff
  • permissions.IsAuthenticatedOrReadOnly
    • 是登录的用户,并且这个API是只能读的(也就是GET、OPTIONS、HEAD)

自定义权限

  • 条件
    有时候drf自带的权限无法满足要求,那么我们可以自定义权限。自定义权限要遵循两个条件:
    1、继承自permissions.BasePermission
    2、 现has_permission(self,request,view)或者是has_object_permission(self, request, view, obj)方法。第一个方法用管理整个视图的访问权限,第二个方法可以用来管理某个对象的访问权限(比如只能修改自己的用户信息)
  • 示例
from rest_framework import permissions
class IsOwnerOrReadOnly(permissions.BasePermission):
    # 只允许查看用户自己创建的数据
    def has_object_permission(self, request, view, obj):
        if request.method in permissions.SAFE_METHODS:
            return True
        return obj.owner == request.user
from rest_framework import permissions
class ShowPagePermissions(permissions.BasePermission):
    def has_permission(slef,request,view):
        if request.user.has_perm('app名.权限标识'):
            return true
        else:
            return flase
posted @ 2021-01-02 14:17  xsan  阅读(27)  评论(0编辑  收藏