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