在项目初始化时创建项目级权限



当我第一次在 Django 项目上运行manage.py migrate时,我希望使用一些额外的权限初始化数据库。我在这里看到,这可以在应用程序级别,在 apps.py 文件中完成。 但是,我希望拥有的权限与整个项目有关,而不是与其中一个应用程序有关。

我的问题是:

  • 是否可以定义项目级权限,或者权限是否始终是应用程序的一部分?
  • 如果项目级权限没问题,那么定义它们以便在项目初始化时创建它们的合适位置是什么?

要创建权限,您需要一个ContentType并且它们存在于应用程序中,因此您无法创建"项目级"权限。权限必须在某个应用程序中创建(一切都是应用程序(,并且在项目中安装应用程序后,您将能够在整个项目中引用权限。

由于权限与内容类型(模型(相关,因此您可以在模型中创建权限,如下所示:

class SomeModelClass(models.Model):
# ...
class Meta:
permissions = (
("can_drive", "Can drive"),
("can_vote", "Can vote in elections"),
("can_drink", "Can drink alcohol"),

注意:所有模型都有 4 个默认权限

创建权限的另一种方式可以是编程方式的某个地方,也许是一个信号,一个自定义迁移......看看这里

最新更新