我已经阅读了很多类似的主题,并且我知道有多种方法可以实现目标,但是我想知道是否有人对此有看法。
问题陈述
我的应用程序主要有两种类型的用户。客户和员工。从端点检索数据时,客户看到的查看者字段比工作人员还常见。
此外,列表视图中的数据通常比检索的字段少。
解决方案?
为每种方法以及每种用户类型创建一个序列化器。例如,在/ order端点中,我最多可以有8个不同的序列化器
OrdersListStaffSerializer
OrdersListCustSerializer
OrdersRetrieveStaffSerializer ....等
然后我可以简单地为条件选择合适的序列化器。
PROS
似乎具有很好的灵活性,能够准确控制谁可以看到什么以及允许他们写入什么数据。
缺点
感觉可能需要很多重复的工作。
缺乏基于权限对数据进行更精细控制的能力。
想知道是否有人对这种类型的设计有任何经验,或者它是否运作良好或过于笨重以致无法维护。
谢谢!
答案 0 :(得分:0)
这似乎是一个非常原始的解决方案,但是如果您发现自己想要一种基于用户许可来显示字段的更细粒度的方式,则可以尝试一下。
首先,将所有需要许可的字段设为SerializerMethodField
。
在每种方法中,请检查用户权限并返回其具有访问权限的字段值,否则,返回诸如_Not_Permitted_
最后,在序列化程序的to_representation
方法中,删除您定义的占位符值为_Not_Permitted_
的所有字段。
就像我说的那样,这是一个非常原始的解决方案,但是它可以让您完全控制每个用户看到的字段级别
顺便说一句,您也可以继续检查to_representation
方法中的权限,而不使用SerializerMethodField
s