2011-08-04 28 views
3

是否有可能有manage.py執行syncdb命令僅同步自定義權限auth_permission表?我不想默認安裝的應用程序模型3組的權限,即foo.add_barfoo.change_barfoo.delete_bar。我在我的模型類中指定了我的自定義權限,如django文檔所示:如何僅將自定義權限與syncdb同步?

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

謝謝!

+0

看看http://stackoverflow.com/questions/6062655/remove-or-hide-default-permissions-from-django – JamesO

+0

你的鏈接是絕對沒有意義的... – Stan

回答

10

你有2個解決方案,在這裏,據我所知:

  1. auth_permission表手動插入;
  2. 添加一個命令this snippet

添加一個命令是非常簡單的。只需在您的應用程序之一(here the official documentation)創建於management.commands封裝模塊sync_perms.py(與代碼片段)。

然後運行:

python manage.py sync_perms 

的Et瞧!

0

您需要在指定元至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

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是用戶在權限列表中查看的字符串,數字是從第一個查詢中找到的應用程序標識,codename是您將在模板中使用的代碼,例如在模板中,您可以使用

{{perms.application.can_add_name}}