所以我在SO上看到了几个类似的问题,但不是我想要的。
我正在尝试在同一视图中为每个方法设置不同的权限。我目前有什么:
class MyViewSet(viewsets.ViewSet):
# User must be authenticated
permission_classes = (IsAuthenticated,)
def list(self, request):
...
# User must be admin
def create(self, request):
...
def retrieve(self, request):
...
基本上我正在努力确保只有管理员可以调用create
方法。我已经看过创建自定义权限,但这适用于整个视图集,这不是我想要的。
答案 0 :(得分:3)
我认为没有内置的解决方案。但是你可以通过覆盖get_permissions
方法来实现这一点。
class MyViewSet(viewsets.ViewSet):
permission_classes_by_action = {'create': [IsAdminUser]
'default': [IsAuthenticated]}
def get_permissions(self):
try:
# return permission_classes depending on `action`
return [permission() for permission in self.permission_classes_by_action[self.action]
except KeyError:
# action is not set return default permission_classes
return [permission() for permission in self.permission_classes_by_action['default']]
答案 1 :(得分:0)
也许你可以这样做
def create(self, request):
if request.user.is_superuser:
....