2017-01-12 49 views
1

現在我有這樣自定義創建權限的

class FileCategory(models.Model): 
    file_type = models.CharField(_('type'), max_length=128) 

    def __unicode__(self): 
     return self.file_type 


class Doc(models.Model): 
    owner = models.ForeignKey(settings.AUTH_USER_MODEL, 
     on_delete=models.CASCADE) 
    file_category = models.ForeignKey('FileCategory', null=True) 
    file = models.FileField(upload_to='documents/', 
          null=True, blank=True) 

    class Meta: 
     permissions = (("upload_file", "upload file"), 
         ("delete_file", "delete file"), 
         ("download_file", "download file"), 
         ("access_file", "access file"), 
         ) 

models.py現在我想添加的權限,每FileCategory表 例如,如果我有filecategory numm,dumm和SUMM 我想自動有權("access_file_numm","access_file_summ","access_file_dumm",)

我試圖做這樣一個解決方案:

permissions = (bla,bla,bla, 
        )+\ 
        ("access_file_%s" (type.__str__() for type in FileCategory.objects.all()), 
        "access %s"(type.__str__() for type in FileCategory.objects.all())) 

而且知道我是否想將它們遷移到數據庫

解決方法:

爲Moemn答案與編輯:

def save(self, *args, **kwargs): 
    super(FileCategory, self).save(*args, **kwargs) 

    Permission.objects.get_or_create(content_type=ContentType.objects.get_for_model(Doc), 
           codename="access_type_%s" % self.file_type, 
           name="access type %s" % self.file_type) 

回答

1

您可以通過每FileCategory創建後創建Permission動態做到這一點。

例如

def save(self, *args, **kwargs): 
    super(FileCategory, self).save(*args, **kwargs) 
    Permission.objects.create(content_type=ContentType.get_for_model(Doc), name="access_file_%s" % self.file_type) 
    Permission.objects.create(content_type=ContentType.get_for_model(Doc), name="access_%s" % self.file_type) 

或者您可以使用信號,相同的想法。

+0

非常感謝@ Mo'men 它的工作,我用你的答案(編輯)更新了問題, –