2013-07-18 104 views
4

我想使用Tastypie授權來授予用戶訪問其對象的權限。但是,如果我正確地做到了,我會遇到問題。我跟着這裏的例子:Django 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是否使用其他方法授權用戶?

+0

如果您要更改用戶擁有的行(行級授權),'bundle.obj.user == bundle.request.user'將返回true。那是你正在嘗試做什麼? –

+0

是的。當我執行PUT請求時,這可以正常工作。但是,它在POST請求期間不起作用。 POST僅適用於刪除這兩行的情況。 – bwang88

+0

這聽起來像一個錯誤。我會在Tastypie的Github頁面上報告這個問題。 –

回答

0

嘗試:

def create_detail(self, object_list, bundle): 
    return bundle.obj == bundle.request.user 
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的文檔都有點過。

而且,我希望這有助於。