在之前定义权限类时,类中可以定义两个方法:has_permissionhas_object_permission

    • has_permission (粗粒度:url) ,在请求进入视图之前就会执行。
    • has_object_permission (细粒度: url下的某个CURD),当视图中调用 self.get_object时就会被调用(删除、更新、查看某个对象时都会调用),一般用于检查对某个对象是否具有权限进行操作。
    1. class PermissionA(BasePermission):
    2. message = {"code": 1003, 'data': "无权访问"}
    3. def has_permission(self, request, view):
    4. exists = request.user.roles.filter(title="员工").exists()
    5. if exists:
    6. return True
    7. return False
    8. def has_object_permission(self, request, view, obj):
    9. return True

    所以,让我们在编写视图类时,如果是直接获取间接继承了 GenericAPIView,同时内部调用 get_object方法,这样在权限中通过 has_object_permission 就可以进行权限的处理。