是否可以在整个请求中保留权限?

令人讨厌的

所以我有一个模型,我正在做一个PATCH通过一个视图,在某些情况下可以发生变异我的对象,调用者就是容许再发生变异它。

我的权限类如下所示:

class MyPermission(BasePermission):

   def has_object_permission(self, request, view, obj):
       if request.user.has_perm("can_change_when_not_done") and obj.status != "done":
           return True
       return super(MyPermission, self).has_object_permission(request, view_obj)

这按预期工作。

但是,似乎当我将对象打补丁为“完成”时(例如{'status': 'done'},在有效负载中),它在返回的过程中通过了序列化程序,该序列化程序进行了另一次权限检查,结果为403,因为该对象现在已“完成” ”。我仍想从该请求中获得该对象现在的外观的200和序列化视图。将来的变异请求应生成403。

设置对象下的“安全”的方法(例如是只读的GET)确实没有帮助,因为原来的请求仍然是一个PATCH

有没有一种简单的方法可以实现我想要的目标,还是我要解决这个错误?

令人讨厌的

原来我弄错了。权限检查仅发生一次,并且在请求期间非常早。

就我而言,问题在于信号处理程序执行PATCH请求。当时我还不知道,那个模型上还有另一个信号处理程序,在某个时候可以做到instance.save()这导致我的信号处理程序运行两次,这显然在第二个请求上导致了403。

合并信号处理程序(没有理由同时存在)后,一切都将正常运行。希望这对以后的人有所帮助!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我是否可以始终在内存中保留整个ArangoDB集合?

是否可以在模型类中保留数据

QFile :: copy是否在复制的文件中保留源文件权限?

从整个 html 中保留表单标签的内容

是否可以请求对特定内容Uri的读取访问权限?

是否可以从库中请求运行时权限?

代理通过后是否可以保留原始请求IP?

Django 1.6 OrderedDict是否在请求中保留状态?或默认情况下启用了缓存?

在URLEncoded Http Post请求中保留+(加号)

在请求中保留新声明

在 Laravel 请求中保留新行

是否可以在正則表達式替換命令中保留捕獲組?

是否可以在Django的SearchVectorField中保留一个联接字段?

是否可以添加图像作为背景来编辑在 Android 中保留下划线的文本?

是否可以检测C中保留标识符的使用冲突?

是否可以在Google App Engine中保留规范化的模型?

是否可以在Scala列表或Map中保留多个DataFrame以进行迭代处理

Spring集成:在整个链中保留消息的上下文

如何在Android API 19(KitKat)中保留权限?

是否可以在整个执行路径中使用特定于请求的类?

是否可以在Plack :: Middleware中强制最大上传大小,而无需阅读请求的整个内容?

R8 / Android Gradle插件是否足够智能,可以仅在测试apk中保留所需的库类/方法?

GmailAPI服务帐户是否可以访问*要求*委派整个域的权限,以仅从所有者的地址发送邮件?

在PhpStorm中保留PHP HTTP请求之间的会话

如何在PHP CURL请求中保留Integer

Java 线程 ID 是否会在整个堆栈中保持不变?

是否可以在NSUserDefaults中保存NSManagedObject?

是否可以在CodenameOne中保存多维数组?

子类可以在Java中保留未实现的抽象方法吗?