2017-06-27 3 views
0

Ich versuche, Berechtigungen zu erstellen, so dass jeder Benutzer die Artikel bestimmter Autoren sehen kann. Beispielberechtigungen sind Can view author1, Can view author2 etc. und Can view all. In der Artikel Klasse habe ich versucht, die Berechtigungen wie folgt zu erstellen:Berechtigungen basierend auf Modellfeldnamen in Django erstellen

class Article(models.Model) 
    #some not important stuff 
    class Meta: 
     permissions = (
      ('view_%s' % Author.name, 'Can view %s' % Author.name), 
      ('view_all', 'Can view all'), 
     ) 

Das hat nicht funktioniert und von dem, was ich weiß, die Berechtigungen in der Datenbank gespeichert sind, so ist es sogar möglich, die Berechtigungen auf diese Weise zu erstellen?

Antwort

0

Ich denke, eine bessere Design-Lösung wäre:

class Author(models.Model): 
    ... 
    my_allowed_viewers = models.ManyToManyField('self', related_name='views_allowed', reverse=False) 

und dann die Erlaubnis machen wie

class IsAuthorizedReader(permissions.BasePermission): 

    def has_permission(self, request, view): 
     author_id = request.user.id 
     author_to_view_id = request.data.get('author_to_view_id') 
     if author_to_view_id is not None: 
      return Authors.objects.get(pk=author_to_view_id).my_allowed_viewers.filter(author_id).exists() 
     return False 
+0

Das ist nicht das, was ich zu erreichen versuchen, mag ich die Berechtigungen in der erstellen Meta abhängig von den Namen des Autors. – filtfilt

+0

Sorry, ich habe keine Ahnung, wie ich das erreichen kann ... –

Verwandte Themen