Django實戰(23):權限控制


我們已經實現了登錄和注銷功能,但是它還沒有起作用。因為匿名用戶還是可以通過直接輸入url:http://localhost:8000/depotapp/product/list/ 訪問到產品管理界面。這就好像你在門上加了把鎖,卻沒有把窗戶關上一樣。所以我們還需要進行訪問控制。

我們這里實現最簡單的控制,非登錄用戶禁止訪問產品管理界面。在Django里面,只需要在相應的視圖函數前面增加@login_required修飾符即可:

 

 

login_required實現了如下功能:

如果用戶沒有登錄, 重定向到/accounts/login/,並且把當前絕對URL作為next參數用get方法傳遞過去;

如果用戶已經登錄, 正常地執行視圖函數。

 

這樣我們例子中需要的功能就實現了。但是這充其量是“登錄限制”,而更常見的需求是“訪問控制”,即區分已經登錄的用戶,對不同的視圖有不同的訪問權限。因為我們的例子中沒有涉及到,所以只把相關的做法簡單例舉在下面。

1.訪問控制功能通過Django的 request.user.has_perm() 來實現,該函數返回True或False,表示該用戶是否有權限。而權限是auth 應用中定義的Permission類型;User與Permission是many-to-many的關系。

2. Django還提供了一個@permission_required修飾符,來限定view函數只有在User具有相應權限的情況下才能被訪問。

3. Django對於每個模型類,自動增加add、change、delete三種權限,以便於權限控制。當然你也可以設定自己的權限。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM