# 重写ModelViewSet权限
permission_classes_by_action = {'default': [],
'update': [],
'destroy': [],
'questionnaire_question_list': [CommonUserType],
'list': [CommonUserType],
'user_questionnaire_list': [],
'create': [CommonUserType],
}
# 重写get_permissions
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']]
其中permission_classes_by_action详解
permission_classes_by_action 可以针对不同的 action 设置不同的权限类,一些常用的 action 包括:
list: 列出对象列表
create: 创建对象
retrieve: 查看对象详情
update: 更新对象
partial_update: 部分更新对象
destroy: 删除对象
除此之外还可以根据需要添加自定义 action,例如:
user_questionnaire_list: 返回当前用户的问卷列表
submit_questionnaire: 提交问卷
具体需要哪些 action,需要根据业务需求来决定。在设置权限时,需要根据不同的 action 来设置对应的权限类,例如:
permission_classes_by_action = {
'list': [CommonUserType],
'create': [AdminUserType],
'retrieve': [CommonUserType],
'update': [AdminUserType],
'partial_update': [AdminUserType],
'destroy': [AdminUserType],
'custom_action': [CustomPermission],
}