在之前定义权限类时,类中可以定义两个方法:has_permission
和 has_object_permission
has_permission (粗粒度:url)
,在请求进入视图之前就会执行。has_object_permission (细粒度: url下的某个CURD)
,当视图中调用self.get_object
时就会被调用(删除、更新、查看某个对象时都会调用),一般用于检查对某个对象是否具有权限进行操作。
class PermissionA(BasePermission):
message = {"code": 1003, 'data': "无权访问"}
def has_permission(self, request, view):
exists = request.user.roles.filter(title="员工").exists()
if exists:
return True
return False
def has_object_permission(self, request, view, obj):
return True
所以,让我们在编写视图类时,如果是直接获取间接继承了 GenericAPIView,同时内部调用 get_object
方法,这样在权限中通过 has_object_permission
就可以进行权限的处理。