基于 Django rest 框架中的 action/url 的权限
permission based on the action/url in Django rest framewrok
我有一个 Modelviewset class,其中有几个函数,如 list()、destroy、partial_update() 以及其他自定义函数,如 def get_examples(self,request)
。问题是不同的功能根据用户类型具有不同的权限。我在权限文件中有单独的权限 class。现在我需要访问 has_permission 函数中的操作。我知道它可以在 modelviewset class 中的 get_permission 函数中完成。但是我们如何在 has_permission 函数中实现呢??
我的看法:
class ExampleView(viewsets.ModelViewSet):
queryset = Example.objects.all().order_by("-created_at")
serializer_class = ExampleSerializer
pagination_class = ExampleNumberPagination
def list(self, request, *args, **kwargs):
def partial_update(self, request, *args, **kwargs):
def custom_fuctin_1(self,request,*args,**kwargs):
def custom_fuctin_2(self,request,*args,**kwargs):
def destroy(self, request, *args, **kwargs):
现在权限文件:
class ExampleClassPermission(BasePermission):
def has_permission(self, request, view):
user =request.user
if request.method == 'GET' or request.method == 'POST':
return True
elif request.method == 'DELETE' and (user.role == 'manager' or user.role == 'admin'):
return True
elif request.method == 'PUT':
return True
else:
return False
在此权限class中,我想为视图class中的自定义function_1和2设置权限。我不能做 self.action == ''?就像在 get_permission.Can I??
您可以使用 view
参数访问操作:
class ExampleClassPermission(BasePermission):
def has_permission(self, request, view):
if view.action == 'list':
# your code here
我有一个 Modelviewset class,其中有几个函数,如 list()、destroy、partial_update() 以及其他自定义函数,如 def get_examples(self,request)
。问题是不同的功能根据用户类型具有不同的权限。我在权限文件中有单独的权限 class。现在我需要访问 has_permission 函数中的操作。我知道它可以在 modelviewset class 中的 get_permission 函数中完成。但是我们如何在 has_permission 函数中实现呢??
我的看法:
class ExampleView(viewsets.ModelViewSet):
queryset = Example.objects.all().order_by("-created_at")
serializer_class = ExampleSerializer
pagination_class = ExampleNumberPagination
def list(self, request, *args, **kwargs):
def partial_update(self, request, *args, **kwargs):
def custom_fuctin_1(self,request,*args,**kwargs):
def custom_fuctin_2(self,request,*args,**kwargs):
def destroy(self, request, *args, **kwargs):
现在权限文件:
class ExampleClassPermission(BasePermission):
def has_permission(self, request, view):
user =request.user
if request.method == 'GET' or request.method == 'POST':
return True
elif request.method == 'DELETE' and (user.role == 'manager' or user.role == 'admin'):
return True
elif request.method == 'PUT':
return True
else:
return False
在此权限class中,我想为视图class中的自定义function_1和2设置权限。我不能做 self.action == ''?就像在 get_permission.Can I??
您可以使用 view
参数访问操作:
class ExampleClassPermission(BasePermission):
def has_permission(self, request, view):
if view.action == 'list':
# your code here