[Python學習] Django 許可權控制

來源:互聯網
上載者:User

標籤:分離   鑰匙   logs   require   move   http   list   欄位   執行個體   

本文為大家講解 Django 架構裡內建的許可權模型,從理論到實戰演練,帶領大家瞭解 Django 裡許可權是怎麼一回事。

一、主要內容

1、什麼是許可權管理?

2、Web 許可權

3、Django 許可權機制

4、Django 的許可權項

5、許可權應用

   Permission(一)

   Permission(二)

   User Permission 管理(一)

   User Permission 管理(二)

   Group Permission 管理

   許可權驗證(一)

   許可權驗證(二)

   許可權驗證(三)

   許可權驗證(四)

二、什麼是許可權管理

許可權管理,一般指根據系統設定的安全規則或者安全性原則,使用者可以訪問而且只能訪問自己被授權的資源許可權管理好比如鑰匙,有了鑰匙就能把門開啟,但是使用權限設定是有層級之分的,假如這個系統有多個權限等級就如一間屋有多個門,想要把所有門都開啟您必須要取得所有的鑰匙,就如系統一樣。

三、Web 許可權

在 Web 裡許可權管理是 Web 應用程式項目中比較關鍵的環節,因為瀏覽器是每一台電腦都已具備的,如果不建立許可權管理系統,那麼一個“非法使用者”可以輕而易舉通過瀏覽器訪問Web應用項目中的所有功能。因此需要許可權管理系統進行許可權檢測,讓經過授權的使用者可以正常合法的使用已授權的功能,而對那些未授權的非法使用者拒之門外。 一個好的許可權管理系統應該對每一類或每一個使用者,分配不同的系統操作許可權,並應具有擴充性,也就是它可以加入到任何一個帶有許可權管理的 Web 應用程式項目中,就像構件一樣可以被重複使用。 同時,還要提醒開發人員,開發一個 Web 應用程式項目時,應儘可能的將整個系統細化,分解為若干個子模組,最後組合成一個完整的應用。也只有這樣,才容易實現為每一類或每一個使用者指派不同的操作許可權。

四、Django 許可權機制

Django 許可權機制能夠約束使用者行為,控制頁面的顯示內容,也能使 API 更加安全和靈活;用好許可權機制,能讓系統更加強大和健壯

Django 用 user, group 和 permission 完成了許可權機制,這個許可權機制是將屬於 model 的某個 permission 賦予 user 或 group,可以理解為全域的許可權,即如果使用者A對資料模型(model)B 有可寫入權限,那麼 A 能修改model B 的所有執行個體(objects)。group 的許可權也是如此,如果為 group C 賦予 model B 的可寫入權限,則隸屬於 group C 的所有使用者,都可以修改model B 的所有執行個體。

五、Django 的許可權項

Django 用 permission Object Storage Service許可權項,每個model預設都有三個permission,即 add model, change model 和 delete model

permission 總是與 model 對應的,如果一個 object 不是 model 的執行個體,我們無法為它建立/分配許可權

六、許可權應用

       Permission

      User Permission

      Group Permission

      許可權檢查

1、 Permission(一)

Django 定義每個 model 後,預設都會添加該 model 的 add, change 和 delete三個 permission,自訂的 permission 可以在我們定義 model 時手動添加

2、Permission(二)

 每個 permission 都是 django.contrib.auth.Permission 類型的執行個體,該類型包含三個欄位 name, codename 和 content_type,

content_type 反應了 permission 屬於哪個 model,

codename 如上面的 view_server,代碼邏輯中檢查許可權時要用,

name 是 permission 的描述,將 permission 列印到螢幕或頁面時預設顯示的就是 name

3、 User Permission管理(一)

User 對象的 user_permission 欄位系統管理使用者的許可權 
user = User.objects.get(username="rock") 
user.user_permissions = [permission_list] 
user.user_permissions.add(permission, permission, …) #增加許可權 
user.user_permissions.remove(permission, permission, …) #刪除許可權 
user.user_permissions.clear() #清空許可權 
# 註:上面的 permission 為 django.contrib.auth.Permission 類型的執行個體

4、User Permission 管理(二)

 檢查使用者權限用 has_perm() 方法:

has_perm() 方法的參數,即 permission 的 codename,但傳遞參數時需要加上  model 所屬 app 的首碼,無論 permission 賦予 user 還是 group,has_perm()方法均適用 

 列出使用者的所有許可權

列出使用者所屬group的許可權

Group Permission 管理

group permission 管理邏輯與 user permission 管理一致,group 中使用permissions 欄位做許可權管理:  
group.permissions = [permission_list] 
group.permissions.add(permission, permission, …) 
group.permissions.remove(permission, permission, …) 
group.permissions.clear()

許可權驗證(一)

在視圖中驗證許可權—— permission_required

當商務邏輯中涉及到許可權檢查時,decorator 能夠分離許可權驗證和核心的商務邏輯,使代碼更簡潔,邏輯更清晰。permission 的 decorator 為permission_required

許可權驗證(二)

在類別檢視中驗證

許可權驗證(三)

 views 中驗證

許可權驗證(四)

Template 中的許可權檢查

 

擴充閱讀:

使用 Django 認證系統:http://python.usyiyi.cn/translate/django_182/topics/auth/default.html

 

 交流QQ群:238757010

 

[Python學習] Django 許可權控制

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.