【问题标题】:how to set the default permission name created in Django?如何设置在 Django 中创建的默认权限名称?
【发布时间】:2014-10-16 23:04:42
【问题描述】:

我正在使用 django 1.6

现在当我定义一个模型时,它会为其创建三个权限记录(can_createcan_updatecan_delete)。

我现在在模型上添加其他权限(这在这个问题中无关紧要),并希望创建一个视图让用户将它们全部分配给用户和组。


现在的问题是:

我想替换显示的默认名称来替换三个默认创建的权限。

有什么办法吗?

【问题讨论】:

  • 您要解决的问题是什么?
  • @Burhan Khalid,大师,我想覆盖模型声明中的默认权限名称,您能帮忙吗?

标签: django model permissions


【解决方案1】:

我无法对已经存在的答案添加评论,因此添加了新答案。

我一直在寻找解决方案,但找不到任何解决方案。所以我只是使用默认权限并使用权限重新创建它们并使用您想要的任何名称和代号。 Django 文档here

class Foo(models.Model):
    title = models.CharField(max_length=250)

    class Meta:
        default_permissions = ()
        permissions = (
            ("add_foo", "Can add foo"),
            ("change_foo", "Can change foo"),
            ("delete_foo", "Can delete foo"),
            ("view_foo", "Can view foo"),
            ("list_foo", "Can list all foo")
        )

【讨论】:

    【解决方案2】:

    是的,在 django 中创建模型/表时可以创建自定义权限。但这会创建额外的自定义权限,默认情况下会创建 3 个权限,即(添加、更改、删​​除)。可以通过以下方式创建自定义权限。

    class Task(models.Model):
    ...
      class Meta:
        permissions = (
            ("view_task", "Can see available tasks"),
            ("change_task_status", "Can change the status of tasks"),
            ("close_task", "Can remove a task by setting its status as closed"),
        )
    

    唯一要做的就是在您运行 ma​​nage.py migrate 时创建那些额外的权限(创建权限的函数连接到 post_migrate 信号)。当用户尝试访问应用程序提供的功能时,您的代码负责检查这些权限的值(查看任务更改任务状态、关闭任务。)继续上面的示例,以下检查用户是否可以查看任务:

    user.has_perm('app.view_task')
    

    可以在这里查看 django 文档django permission description

    【讨论】:

      【解决方案3】:

      基于this blog postDjango ticket,我想说更改这些代号是不可能的,也不可取的(因为它们在管理员中使用)。但是可以更改人类可读的名称(例如“可以添加权限”)

      【讨论】:

      • 谢谢你,这就是我的意思,你指出了一个有用的线程。而且我知道这种情况没有很好的解决方案。一路感谢!
      • 很高兴能帮上忙 :)
      猜你喜欢
      • 2013-11-20
      • 2018-02-14
      • 2013-05-16
      • 2017-04-04
      • 2012-05-12
      • 2017-11-11
      • 2018-02-12
      • 1970-01-01
      • 2014-06-18
      相关资源
      最近更新 更多