国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Django權限機制實現代碼詳解

2020-02-22 23:07:29
字體:
來源:轉載
供稿:網友

本文研究的主要是Django權限機制的相關內容,具體如下。

1. Django權限機制概述

權限機制能夠約束用戶行為,控制頁面的顯示內容,也能使API更加安全和靈活;用好權限機制,能讓系統更加強大和健壯。因此,基于Django的開發,理清Django權限機制是非常必要的。

1.1 Django的權限控制

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自帶的權限機制無法滿足需求,需要引入另一種更細的權限機制:對象權限(object permission)。

Object Permission是一種對象顆粒度上的權限機制,它允許為每個具體對象授權。仍沿用最開始的例子,如果model B有三個實例 B1,B2 和B3,如果我們把B1的可寫權限賦予用戶A,則A可以修改B1對象,而對B2,B3無法修改。

對group也一樣,如果將B2的可寫權限賦予group C,則隸屬于group C的所有用戶均可以修改B2,但無法修改B1和B3。結合Django自帶權限機制和object permission,博客系統中作者的權限控制迎刃而解:系統全局上不允許作者編輯文章,而對于屬于作者的具體文章,賦予編輯權限即可。

Django其實包含了object permission的框架,但沒有具體實現,object permission的實現需要借助第三方app django-guardian,我們在開發中用調用django guradian封裝好的方法即可。

1.2 Django的權限項

Django用permission對象存儲權限項,每個model默認都有三個permission,即add model, change model和delete model。例如,定義一個名為『Car』model,定義好Car之后,會自動創建相應的三個permission:add_car, change_car和delete_car。Django還允許自定義permission,例如,我們可以為Car創建新的權限項:drive_car, clean_car, fix_car等等

需要注意的是,permission總是與model對應的,如果一個object不是model的實例,我們無法為它創建/分配權限。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 拉孜县| 泰和县| 芷江| 伊春市| 绵阳市| 苏尼特右旗| 肇东市| 白河县| 陵川县| 安达市| 乡城县| 柘城县| 定南县| 赣榆县| 青州市| 浦北县| 诸暨市| 商南县| 莱西市| 谢通门县| 托里县| 浦江县| 萍乡市| 昭觉县| 庄浪县| 辽宁省| 三明市| 邵武市| 澎湖县| 泽库县| 南丹县| 博兴县| 崇礼县| 安宁市| 饶平县| 翼城县| 洪雅县| 勐海县| 祁连县| 明溪县| 保定市|