【问题标题】:How to only sync custom permissions with syncdb?如何仅将自定义权限与 syncdb 同步?
【发布时间】:2011-08-04 15:02:56
【问题描述】:

是否可以让 manage.py syncdb 命令仅将自定义权限同步到 auth_permission 表?我不想为应用模型安装默认的三个权限,即foo.add_barfoo.change_barfoo.delete_bar。我在模型类中指定了我的自定义权限,就像 django 文档建议的那样:

class Meta:
    permissions = (
        ("admin", "Can create/edit/delete projects"),
        ("user", "Can view projects"),
    )

谢谢!

【问题讨论】:

标签: django django-models


【解决方案1】:

你有 2 个解决方案,AFAIK:

  1. 手动插入auth_permission表中;
  2. 添加命令this snippet

添加命令非常简单。只需在您的一个应用程序 (here the official documentation) 的 management.commands 包中创建一个模块 sync_perms.py(使用 sn-p 代码)。

然后运行:

python manage.py sync_perms

等等!

【讨论】:

  • from django.db.models import get_models, get_app 在 django3 中似乎已被弃用。
【解决方案2】:

刚刚发布了解决方案 Remove (or hide) default Permissions from Django。 这个想法不是阻止它们被syncdb创建,而是将它们隐藏在管理界面中。

【讨论】:

    【解决方案3】:

    首先您必须找到您的应用程序的内容类型 ID 内容类型 可以通过这个查询找到

    select * from django_content_type;
    

    然后您执行查询以向数据库添加您想要的自定义权限,例如

    insert into auth_permission(name,content_type_id,codename) values
    ('Can add name',12,'can_add_name');
    

    在上面的查询中,name是用户在权限列表中看到的字符串,数字是从第一个查询中找到的应用程序ID,代号是您将在模板中使用的代码,例如在您可以使用的模板中

    {{perms.application.can_add_name}}
    

    【讨论】:

      【解决方案4】:

      您需要在 Meta 上指定 default_permissions 为空元组。 (默认值为('add', 'change', 'delete'))。 Docs.

      class MyModel(models.Model):
          # properties definition...
          class Meta:
              permissions = (
                  ("admin", "Can create/edit/delete projects"),
                  ("user", "Can view projects"),
              )
              default_permissions = ()
      

      我还希望有一个特殊的 MyAppProperties 模型和 Meta.managed=False 来持有我的应用程序范围的权限。

      class MyAppPermissions(models.Model):
          # properties definition...
          class Meta:
              managed = False
              permissions = (
                  ("admin", "Can create/edit/delete projects"),
                  ("user", "Can view projects"),
              )
              default_permissions = ()
      

      这样它不会创建数据库表,而是创建它的权限。 Docs

      【讨论】:

        猜你喜欢
        • 2015-06-21
        • 2020-11-05
        • 2020-04-02
        • 1970-01-01
        • 2018-01-15
        • 1970-01-01
        • 1970-01-01
        • 2019-10-10
        • 1970-01-01
        相关资源
        最近更新 更多