【问题标题】:Rename django custom permissions重命名 django 自定义权限
【发布时间】:2020-05-17 11:01:21
【问题描述】:

我正在使用 django 2.0 应用程序并将 django 版本更新到 3.0。 但在我的项目中,很少有像 view_modelname 这样的自定义权限。

class MyConcreteModel(models.Model):
    model_field_1 = models.CharField(max_length=100, blank=False)
    # other fields
    class Meta:
        permissions = (
            ("view_myconcretemodel", "Can see available device interfaces"),
        )      

在 django 3(自 v 2.1 起)中,这种权限是默认的。所以我与权限名称发生冲突。

现在我正在尝试在更新 django 版本之前重命名自定义权限。

class MyConcreteModel(models.Model):
    model_field_1 = models.CharField(max_length=100, blank=False)
    # other fields
    class Meta:
        permissions = (
            ("user_view_myconcretemodel", "User can see available device interfaces"),
        )      

迁移后,在数据库中创建了“新”(使用新名称)权限。但是旧权限仍然存在,并且所有用户都有旧权限(使用旧名称,例如 view_myconcretemodel)。显然,我需要所有用户的“新”权限。

是否有可能简单地重命名权限或向相关用户授予“新”权限(根据“旧”权限),并自动执行?

【问题讨论】:

    标签: django django-models django-migrations django-permissions


    【解决方案1】:

    读完如何以编程方式创建权限https://docs.djangoproject.com/en/3.2/topics/auth/default/#programmatically-creating-permissions

    我的解决方案是在Permission 模型中修改codename。即

    from django.contrib.auth.models import Permission
    
    perm = Permission.objects.get(codename="view_myconcretemodel") #old name
    perm.codename = "user_view_myconcretemodel" #new name
    perm.save()
    

    【讨论】:

      猜你喜欢
      • 2013-09-28
      • 1970-01-01
      • 2022-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多