所以我有这个:
class UserViewSet(viewsets.ModelViewSet):
permission_classes = [TokenHasReadWriteScope]
queryset = User.objects.all()
serializer_class = UserSerializer
entity_name = 'user'
perm_type = {
'POST': 'create',
'GET': 'read',
'PATCH': 'update',
'DELETE': 'delete'
}
def check_permissions(self, request):
user = request.user
has_permissions = user.has_entity_permissions(
name=self.entity_name,
perm_type=self.perm_type[request.method]
)
if not has_permissions:
raise PermissionDenied
def create(self, request, *args, **kwargs):
self.check_permissions(request)
return super().create(request, *args, **kwargs)
def list(self, request, *args, **kwargs):
self.check_permissions(request)
return super().list(request, *args, **kwargs)
def update(self, request, *args, **kwargs):
self.check_permissions(request)
return super().update(request, *args, **kwargs)
我有一个自定义安全服务器,目的是集中公司的所有应用程序,所以当我们有一个新员工时,我们可以让他访问每个实体中具有不同权限的不同应用程序及其属性。单个应用程序而不是创建用户并在每个应用程序中授予他权限。
所以基本上在" check_permission"函数我检查这个,取决于请求方法(perm_type关联请求方法与权限(CRUD))
问题: 有一种方法可以在进入列表,检索,创建,更新或删除之前捕获请求(Middlewears不工作因为我需要知道实体类型或端点,这就是为什么我设置了entity_name变量,但是如果你有更好的主意欢迎)