我已经在 ListCreateAPIView 上定义了 get_permissions 方法并在那里应用了自定义权限,但我遇到了一个问题。
class ListSchoolStudents(generics.ListCreateAPIView,TeacherPermission):
serializer_class = StudentSerializerForList
permission_classes = [IsAuthenticated & TeacherPermission]
def get_queryset(self):
pk = self.kwargs['pk']
return Student.objects.filter(school__id = pk).select_related('school','school_class').prefetch_related('subject')
def get_permissions(self):
if self.request.method in ['POST']:
return [PrincipalPermission()]
return [permissions.IsAuthenticated(),TeacherPermission()]
当我像这样定义它时,Principal 只能使用 POST 方法。但我也希望该用户能够使用其他方法。我试过这样的事情:
def get_permissions(self):
if self.request.method in ['POST']:
return [PrincipalPermission()]
return [permissions.IsAuthenticated(),TeacherPermission(),PrincipalPermission() ]
但据我所知,它需要满足列表中的所有权限。
我正在寻找这样的东西
return [permissions.IsAuthenticated(),TeacherPermission() or PrincipalPermission() ]
我知道这种可能性存在于permission_classes中
permission_classes = [IsAuthenticated | TeacherPermission]
是否有一种简单的方法可以做到这一点,或者如果用户是教师或校长,我必须编写另一个自定义权限来授予权限?