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

それをコメントアウトすると、すべてが機能します。この 2 行をコメントアウトすると、ユーザーは他のユーザーのオブジェクトを作成できると思いましたが、試してみると、正しく 401 (UNAUTHORIZED) 応答が返されました。

その2行は不要ということですか?Tastypie は、私がオブジェクトを作成する権限を持っているかどうかをどのように正しく判断できますか?

これを実行していたとき、適切な URI (「/api/v1/user/1/」など) に等しい「user」を使用して POST 要求を送信しました。Tastypie の判断に問題があるかどうかはわかりません

bundle.obj.user

私がそうするとき。

Is it safe to just leave those two lines commented out? Is Tastypie authorizing the user with one of the other methods?

4

2 に答える 2

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のドキュメントは少しずれています。

そして、これがお役に立てば幸いです。

于 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 に答える