Django Tastypie用户对象授权

时间:2013-07-18 23:06:21

标签: python django tastypie

我想使用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(未经授权)的响应。

这是否意味着这两行不必要? Tastypie如何能够正确判断我是否有权创建对象?

当我运行这个时,我发送了一个POST请求,其中'user'等于相应的URI(类似'/ api / v1 / user / 1 /')。我不确定Tastypie是否在确定

时遇到问题
bundle.obj.user

当我这样做的时候。

将这两行注释掉是否安全? Tastypie是否使用其他方法之一授权用户?

2 个答案:

答案 0 :(得分:0)

尝试:

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

答案 1 :(得分:0)

看起来在create_detail授权期间没有填充bundle.obj。

此外,对于用户而言,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的文档稍微偏离。

而且,我希望这会有所帮助。