防止 Django 重新创建默认权限

Posted

技术标签:

【中文标题】防止 Django 重新创建默认权限【英文标题】:Prevent Django from re-creating default permissions 【发布时间】:2018-02-14 07:41:22 【问题描述】:

有没有办法可以删除 Django 默认创建的所有权限并阻止它再次创建它们?

目前我有一个运行 Permission.objects.all().delete() 的迁移,我还添加了 default_permissions = () 到我所有模型的 Meta 类中,但是一旦我运行迁移,权限就会消失一秒钟,然后Django 重新创建它们(我知道这是一种真正的娱乐,因为每次运行迁移时每个权限的 ID 都会增加)。

那么,有没有办法完全禁用自动权限创建? 请注意,我说的是禁用创建,而不是隐藏权限(我已经知道该怎么做)。

【问题讨论】:

【参考方案1】:

您是否考虑过创建一个具有post_migrate 信号的应用来执行此操作?

我了解所有 auth 应用程序的权限创建代码都是在调用其 post_migrate 函数时发生的。 见here和here

应该是default_permissions = () should prevent creating permissions 对于您在其 Meta 类中指定的模型,但是由于您不能在第三方或 django 安装的应用程序上执行此操作,因此您将拥有这些权限你的数据库,直到你的新清理 post_migrate 信号出现并清理它们。

希望有帮助

【讨论】:

以上是关于防止 Django 重新创建默认权限的主要内容,如果未能解决你的问题,请参考以下文章

Django内置权限系统源码解读

django多数据库迁移:如何防止在每个数据库中创建django默认表

Django 默认 user 表的替换和扩充

django 默认权限对应表怎么修改

防止django管理员通过创建LogEntry进行更改

Django默认权限机制介绍及实践