December 2, 2019
Django 2.2.8修复了一个安全问题和2.2.7中的几个错误,并添加了与Python 3.8的兼容性。
自Django 2.1以来,Django模型管理员显示具有相关模型内联的父模型,其中用户对父模型具有仅查看权限,但对内联模型具有编辑权限,将显示父模型的只读视图,但对内联模型具有可编辑的表单。
提交这些表单不允许直接编辑父模型,但会触发父模型的 save()
方法,并导致调用保存前和保存后信号处理程序。这是一次特权升级,因为缺乏编辑模型权限的用户不应能够触发其与保存相关的信号。
为了解决此问题,Django管理界面的权限处理代码已更改。现在,如果用户仅拥有父模型的“查看”权限,则整个显示的表单将不可编辑,即使用户有权编辑内联行中包含的模型。
这是一个向后不兼容的更改,Django安全团队意识到,Django的一些用户依赖于允许在仅查看的父模型的管理表单中编辑内联行的能力。
考虑到Django管理员的复杂性,特别是与权限相关的检查,Django安全团队认为这一更改是必要的:目前不可行的是,以避免类似问题在未来再次发生的方式避免潜在的特权升级,并且与Django的兼容 safe by default 哲学
目前,其应用程序受到此更改影响的开发人员应该用显式实现所需功能的自定义表单和视图取代只读父级中内联行的使用。从长远来看,Django本身可能会为部分可编辑的多模型表单添加一个有记录的、受支持的和经过适当测试的机制到管理界面。
Fixed a data loss possibility in the admin changelist view when a custom
formset's prefix contains regular expression special
characters, e.g. '$'
(#31031).
修复了Django 2.2.1中的回归,该回归在迁移具有多个数据库设置的代理模型的权限时导致崩溃 default
条目为空 (#31021 )。
修复了中数据丢失的可能性 select_for_update()
.当使用 'self'
在 of
论点与 multi-table inheritance ,父模型而不是查询集的模型被锁定 (#30953 )。
7月 22, 2024