gpt4 book ai didi

Django Rest Framework 和字段级权限

转载 作者:行者123 更新时间:2023-12-04 15:53:36 24 4
gpt4 key购买 nike

我想构建一个具有字段级权限的 API。我从数据库表中获得这些权限,但在 REST 框架中的哪个位置可以检查用户是否可以对对象的字段执行 CRUD 操作?

database --- model ---- ModelSerializer ---- ModelViewSet --- browser

在 ModelSerializer 中?在这里,我可以在字段到达 View 集之前删除字段,但默认情况下我无权访问 request.user,所以我必须实现它,这可以完成,但不能与我拥有的其他第 3 方库一起使用(django-rest-swagger)

还是在 ModelViewset 中?我可以覆盖列表、创建、更新和销毁方法以删除用户无权访问的字段。但这不适用于我的 Metadata 实现,因为它直接从序列化程序获取元数据。

或者两者都有?例如:当序列化器获取模型时,在序列化器中删除不允许的读取,并在 View 集中删除不允许的写入,然后再将它们传递回序列化器?

最佳答案

您可以根据特定请求所需的字段创建不同的序列化程序。然后你需要覆盖 get_serializer_class()在您的 View 中运行并根据您的逻辑决定序列化程序。

根据 get_serializer_class() 上的 DRF 文档

May be overridden to provide dynamic behavior, such as using different serializers for read and write operations, or providing different serializers to different types of users.



例如:
class MyView(..):

def get_serializer_class(self):
if self.request.user.is_staff: # check if staff user
return FullAccountSerializer
return BasicAccountSerializer
...

关于Django Rest Framework 和字段级权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32502554/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com