2017-01-12 3 views
1

Jetzt habe ich models.py wie dieseIndividuelle Erstellung von Berechtigungen in django Modell

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"), 
         ) 

Jetzt möchte ich für jeden FileCategory Tabellenberechtigungen hinzufügen Zum Beispiel, wenn ich filecategory numm, dumm und summ haben Ich möchte automatisch Berechtigungen ("access_file_numm","access_file_summ","access_file_dumm",)

ich eine Lösung wie diese zu machen versucht:

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())) 

Und sicher, dass ich möchte, dass sie in die Datenbank

Lösung migrieren:

als Moemn antwortet mit einem Edit: durch die Schaffung Permission dynamisch nach jeder FileCategory Schöpfung

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) 

Antwort

1

Sie können dies tun.

z.B.

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) 

Oder Sie können Signale verwenden, die gleiche Idee.

+0

Vielen Dank @ Mo'men Es funktionierte und ich aktualisierte die Frage mit Ihrer Antwort (bearbeitet) –

Verwandte Themen