如何仅使用syncdb同步自定义权限?

时间:2011-08-04 15:02:56

标签: django django-models

是否可以让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"),
    )

谢谢!

4 个答案:

答案 0 :(得分:10)

这里有2个解决方案,AFAIK:

  1. 手动插入auth_permission表;
  2. 添加命令this snippet
  3. 添加命令非常简单。只需在您的某个应用(here the official documentation)的sync_perms.py包中创建一个模块management.commands(带有代码段代码)。

    然后运行:

    python manage.py sync_perms
    

    Etvoilà!

答案 1 :(得分:1)

刚刚发布了解决方案 Remove (or hide) default Permissions from Django。 我们的想法不是阻止它们由syncdb创建,而是将它们从管理界面隐藏起来。

答案 2 :(得分:1)

首先,您必须为您的应用程序找到内容类型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,代号是您将在模板中使用的代码,例如在您可以使用的模板中< / p>

{{perms.application.can_add_name}}

答案 3 :(得分:0)

您需要在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