【发布时间】:2021-06-27 08:36:27
【问题描述】:
我不知道这是否是这样做的好方法。
我有一个端点,它应该检索系统的特定实例。
在担心权限之前,我的视图如下所示:
类 SystemDetail(generics.RetrieveAPIView):
""" 获取系统详细信息 """
查询集 = System.objects.all()
serializer_class= 系统序列化器
我想更新它,因为我希望用户只能看到他们拥有的系统。
所以我像这样更新我的观点:
class SystemDetail(generics.RetrieveAPIView):
def get_queryset(self):
user_groups = self.request.user.groups.all().values_list('name')
if 'all_rights' not in user_groups[0]:
if len(user_groups) == 1: # For now we say that 1 user is only in 1 group
dealer_name: str = user_groups[0][0].capitalize() # Group name are creating progammatically, it is using the same enum than the dealer name on the system
return System.objects.filter(dealer__name=dealer_name)
else:
raise AttributeError('User in 2 groups, endpoint can not manage it')
else:
return System.objects.all()
""" Get a system detail """
serializer_class = SystemSerializer
所以基本上它可以工作,当我尝试访问一个我不应该看到的系统时,我收到了这条消息:
{"detail":"未找到。"}
但我想要的是设置一条带有 403 状态的自定义消息,告诉用户他正在尝试访问他看不到的系统。
实现这一目标的好方法是什么?
谢谢。 :)
【问题讨论】:
标签: django rest django-rest-framework permissions