我想使用Tastypie授权来授予用户仅访问其对象的权限。但是,如果我正确地理解它,我会遇到问题。我跟着这个例子:
当我尝试创建一个新对象时,我收到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是否使用其他方法之一授权用户?
答案 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的文档稍微偏离。
而且,我希望这会有所帮助。