【问题标题】:Django Tastypie User Objects Only AuthorizationDjango Tastypie 仅用户对象授权
【发布时间】:2013-07-18 02:41:40
【问题描述】:

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

bundle.obj.user

当我这样做时。

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

【问题讨论】:

  • bundle.obj.user == bundle.request.user 如果您要更改用户拥有的行(行级授权),将返回 true。这就是你想要做的吗?
  • 是的。当我执行 PUT 请求时,它可以正常工作。但是,它在 POST 请求期间不起作用。 POST 仅在我删除这两行时才有效。
  • 这听起来像是一个错误。我会在 Tastypie 的 Github 页面上将其报告为问题。

标签: python django tastypie


【解决方案1】:

尝试:

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

【讨论】:

    【解决方案2】:

    在 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
    

    无论如何,底线是:seatpie 的文档有点不对劲。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-03
      • 2014-01-13
      • 1970-01-01
      相关资源
      最近更新 更多