2016-05-22 9 views
2

Hier ist mein Modell:PATCH aktualisiert die Daten für ein Modell, sondern antwortet mit einem 401 Unauthorized Fehler

class EmployeeGroup(models.Model): 
    name = models.CharField(max_length=100) 
    members = models.ManyToManyField(EmployeeProfile, 
           related_name='employee_groups', 
           through='GroupMembership') 
    parent_group = models.ForeignKey('self', 
           related_name='children', 
           blank=True, null=True) 

Hier ist meine modelresource:

class EmployeeGroupResource(ModelResource): 
    parent_group = fields.ForeignKey('self', 'parent_group', null=True) 
    members = fields.ToManyField(GroupMembershipResource, 
     attribute = lambda bundle: bundle.obj.members.through.objects.filter(group=bundle.obj) or bundle.obj.members, full=True) 

    class Meta: 
     queryset = EmployeeGroup.objects.all() 
     resource_name = 'employee-groups' 
     authentication = Authentication() 
     authorization = Authorization() 
     filtering = { 
      'members': ALL_WITH_RELATIONS 
     } 

Sie können sehen, dass es keine Kontrollen ist zu getan autorisieren oder authentifizieren Sie den Benutzer zu diesem Zeitpunkt, also warum, wenn ich eine PATCH-Anfrage sende, geht alles gut durch, aber antwortet mit einem nicht autorisierten Fehler?

curl --dump-header - -H "Content-Type: application/json" 
    -X PATCH --data '{"name": "human resources"}' 
    http://localhost:8000/api/v1/employee-groups/12/ 

HTTP/1.0 401 Unauthorized 
Date: Sun, 22 May 2016 19:28:31 GMT 
Server: WSGIServer/0.2 CPython/3.5.1 
X-Frame-Options: SAMEORIGIN 
Content-Type: text/html; charset=utf-8 

Mache ich hier etwas falsch? Ich kann nicht sehen, was der Server tut, um zu sagen, dass der Benutzer nicht autorisiert ist, aber hey ho.

Edit: Silvio gab mir den Schub es zu erarbeiten, wurde die entsprechende Ressource GroupMembershipResource nicht mit der gleichen Berechtigung einrichten, so dass nur zu lesen, es wurde in Verzug. Daher konnte ich den Namen ändern, aber nicht sehen, da die andere Ressource mich aufgehalten hat.

+0

Haben Sie eine andere Berechtigung in der Ressource GroupMembershipResource? – silviomoreto

+0

Das war es !, die GroupMembershipResource hatte noch keine Autorisierung erhalten, also war es standardmäßig nur Lesen. –

+0

Ich werde es der Antwort hinzufügen, um die Lösung für andere explizit zu machen, wenn Sie es als gelöst markieren – silviomoreto

Antwort

1

Stellen Sie sicher, dass Sie die gleiche Authorization in der entsprechenden Ressource GroupMembershipResource angewendet haben, andernfalls wird das Vererben Genehmigung sein Nur-Lese:

Klasse GroupMembershipResource (modelresource): ...

class Meta: 
    authorization = Authorization() 
Verwandte Themen