2016-05-22 3 views
2

Вот моя модель:PATCH обновляет данные модели, но реагирует с 401 Несанкционированными ошибками

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) 

Вот мой 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 
     } 

Вы можете видеть, что нет никаких проверок делаются для авторизацию или аутентификацию пользователя в это время, поэтому почему, когда я отправляю запрос PATCH, все проходит нормально, но отвечает неавторизованной ошибкой?

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 

Я делаю что-то неправильно здесь? Я не вижу, что делает сервер, чтобы сказать, что пользователь несанкционирован, но эй хо.

Edit: Сильвио дал мне толчок для работы его, соответствующий GroupMembershipResource ресурса не был создан с той же авторизацией, поэтому он был недобросовестным только для чтения. Поэтому я мог бы изменить имя, но потом не видел его, поскольку другой ресурс меня останавливал.

+0

У вас есть любая другая авторизация в ресурсе GroupMembershipResource? – silviomoreto

+0

Вот и все !, GroupMembershipResource еще не получил авторизацию, поэтому он по умолчанию не читал. –

+0

Я добавлю это к ответу, чтобы сделать решение явным для других, когда вы помечаете его как решенный – silviomoreto

ответ

1

Убедитесь, что вы использовали то же Authorization в соответствующем ресурсе GroupMembershipResource, в противном случае, разрешение унаследует будет доступно только для чтения:

класса GroupMembershipResource (ModelResource): ...

class Meta: 
    authorization = Authorization()