是否可以让manage.py syncdb命令仅将自定义权限同步到auth_permission
表?我不希望为应用模型安装默认的三个权限,即foo.add_bar
,foo.change_bar
,foo.delete_bar
。我在我的模型类中指定了自定义权限,例如django文档建议:
class Meta:
permissions = (
("admin", "Can create/edit/delete projects"),
("user", "Can view projects"),
)
谢谢!
答案 0 :(得分:10)
这里有2个解决方案,AFAIK:
auth_permission
表; 添加命令非常简单。只需在您的某个应用(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。