And*_*rew 3 django django-rest-framework
所以我在这里看到了一些类似的问题,但不是我想要的。
我试图在同一视图中为每个方法设置不同的权限。我目前拥有的:
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):
...
Run Code Online (Sandbox Code Playgroud)
基本上,我试图确保只有管理员才能调用该create方法。我看过创建自定义权限,但这适用于整个视图集,这不是我想要的。
我认为没有内置的解决方案。但是您可以通过覆盖该get_permissions方法来实现这一点。
class MyViewSet(viewsets.ViewSet):
permission_classes_by_action = {
"default": [IsAuthenticated],
"retrieve": [AllowAny],
}
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"]
]
Run Code Online (Sandbox Code Playgroud)