2013-07-18 3 views
4

Я хочу использовать авторизацию Tastypie, чтобы предоставить пользователям доступ только к их объектам. Однако у меня возникают проблемы с пониманием, правильно ли я делаю это. Я последовал примеру здесь:Django Tastypie Пользовательские объекты Только авторизация

http://django-tastypie.readthedocs.org/en/latest/authorization.html#implementing-your-own-authorization

Когда я пытаюсь создать новый объект, я получаю 404 ошибку, потому что есть проблемы, оценивающие

def create_detail(self, object_list, bundle): 
    return bundle.obj.user == bundle.request.user 

Все работает, если я комментирую это. Я думал, что комментирование этих двух строк позволит пользователю создавать объекты для других пользователей, но когда я попробовал это, я правильно получил ответ 401 (UNAUTHORIZED).

Означает ли это, что эти две линии не нужны? Как Tastypie может правильно определить, разрешено ли мне создавать объекты?

Когда я запускал это, я отправил запрос POST с «пользователем», равным соответствующему URI (что-то вроде «/ api/v1/user/1 /»). Я не уверен, что у Tastypie возникают проблемы с определением

bundle.obj.user 

когда я делаю так.

Можно ли просто оставить эти две строки прокомментированными? Является ли Tastypie авторизацией пользователя одним из других методов?

+0

'bundle.obj.user == bundle.request.user' вернет true, если вы меняете строку, принадлежащую вашему пользователю (авторизация на уровне строк). Это то, что вы пытаетесь сделать? –

+0

Да. Это работает правильно, когда я выполняю запрос PUT. Однако он не работает во время запроса POST. POST работает только в том случае, если я удаляю эти две строки. – bwang88

+0

Это звучит как ошибка. Я бы сообщил об этом как о проблеме на странице Github от Tastypie. –

ответ

0

попробовать:

def create_detail(self, object_list, bundle): 
    return bundle.obj == bundle.request.user 
0

Похоже, bundle.obj не заполняется во время авторизации create_detail.

Кроме того, create_detail для пользователя на самом деле не имеет особого смысла, поскольку для пользователя нет объекта для создания до его создания в любом случае. Вы можете просто проверить, является ли bundle.request.user допустимым пользователем с разрешениями на модель.

В моем случае, мне нужно, чтобы проверить, если создаваемый объект ссылается объект, принадлежащий пользователю, так вот что я придумал:

def create_detail(self, object_list, bundle): 
    resource=BookResource() 
    book=resource.get_via_uri(bundle.data["book"], bundle.request) 
    return book.user == bundle.request.user 

В любом случае, в нижней строке: документы tastypie являются поодаль ,

И, надеюсь, это поможет.

Смежные вопросы