4

我想使用 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 请求,其中 'user' 等于适当的 URI(类似于'/api/v1/user/1/')。我不确定 Tastypie 是否有问题确定

bundle.obj.user

当我这样做时。

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

4

2 回答 2

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

不管怎样,底线是:tasticpie 的文档有点不对劲。

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

于 2015-03-19T15:05:42.490 回答
0

尝试:

def create_detail(self, object_list, bundle):
    return bundle.obj == bundle.request.user
于 2013-08-23T07:47:13.280 回答