2011-11-08 20 views
1

我正在開發一個django項目,用戶可以在該項目中發佈文章並對其投票。但用戶不應該對自己的文章投票。目前我正在使用django-guardian的權限系統。我的想法是授予一種'反許可',這樣只有作者不能在上投票自己的文章。在django中爲用戶授予'反權限'

我的推理是通過這種方式,所有的權限可以在統一的協議中處理,與視圖函數分開處理(而不是將條件放入其中)。如果有這樣的未來需求,他們可以被優雅地處理。

但是這樣看起來使用「權限」在語義上看起來不正確。想知道是否有更好的方法來做到這一點?

感謝您的幫助! :)

+1

http://djangosnippets.org/snippets/1148/ – sehe

+0

如果用戶必須登錄才能投票,那麼可以在模板中通過比較文章作者和用戶對象來實現,然後更改鏈接的功能,按鈕等進行投票。可能有更好的方法。 –

+0

我希望能夠通過許可系統及其裝飾者處理所有用戶許可,但他們似乎非常依賴於情況。所以相反,我會以不同的方式編碼。就像'用戶不應該在自己的帖子上投票'一樣,我只是在視圖函數內部進行檢查,而'新用戶不應該能夠發佈'由權限裝飾器處理。我也會在模板中做一些事情,這樣沒有權限的用戶就可以看到不同的東西。 感謝@sehe的代碼片段,它不是現在的問題,但可以在未來有用:) –

回答

1

編寫一個管理器,接受上下文,然後返回用戶可以投票的對象列表。

在您的視圖中使用此管理器。

+0

我想我也可以編寫一個定製的權限檢查功能來處理這種情況。因此,不是使用'user.has_perm(「can_vote」)',而是隻有當用戶擁有此權限時才能獲得,我可以寫入我的函數'check_perm(user,article,「can_vote」)',並檢查用戶是否爲那裏的文章。 –