摘要:權(quán)限的定義可以使用多種方式進(jìn)行定義在中定義我們可以在的中對(duì)進(jìn)行定義。官網(wǎng)示例如下權(quán)限的校驗(yàn)在中校驗(yàn)權(quán)限利用校驗(yàn)官網(wǎng)示例如下注意除了用指定單個(gè)權(quán)限之外,還支持以及用于多個(gè)權(quán)限。實(shí)際上在當(dāng)中對(duì)于的使用提供了兩個(gè)的功能,一個(gè)是另一個(gè)是。
概述
Django自帶有用戶驗(yàn)證系統(tǒng),它可以處理User、Group、permission以及基于用戶cookie的session。這個(gè)文檔是基于Django官網(wǎng)文檔的介紹,以及其他的資料整理而來。主要的內(nèi)容介紹了Django的用戶驗(yàn)證系統(tǒng)的基本工作原理,并且也會(huì)對(duì)于如何為你的項(xiàng)目定制用戶驗(yàn)證做出簡單介紹。
Permission在Django中的工作原理首先,我們需要定義permission對(duì)象,而這個(gè)對(duì)象在定義的時(shí)候是需要與對(duì)應(yīng)的model綁定的。
然后,定義好的permission就可以賦予給user或者group對(duì)象,實(shí)現(xiàn)permission與用戶的綁定。
最后,在view以及template中可以通過API對(duì)于user或者group進(jìn)行權(quán)限的校驗(yàn)了。
permission可以使用多種方式進(jìn)行定義:
在model中定義我們可以在model的Meta中對(duì)permission進(jìn)行定義。
官網(wǎng)示例如下:
或者可以在獨(dú)立于model之外的位置定義。
官網(wǎng)示例如下:
以上的兩個(gè)例子都是需要我們已經(jīng)具有model的情況下才能定義permission,如果我們還沒有model的情況下,又想要定義permission的話,應(yīng)該怎么處理呢?雖然這個(gè)需求有點(diǎn)奇怪
引用至GoogleGroup一個(gè)不存在的頁面:
url_content_type = ContentType.objects.create( name="url permission", app_label="crashstats", model="unused") can_view_url = Permission.objects.create( name="can view url", content_type=url_content_type, codename="can_view_url") user = User.objects.get(username="example_user", is_superuser=False) user.user_permissions.add(can_view_url)
這樣通過綁定到一個(gè)不存在的model來實(shí)現(xiàn)也是支持的。實(shí)際使用中發(fā)現(xiàn)在定義ContentType的時(shí)候,給model賦值空字符串也是可行的,但是None則不行。
一個(gè)更為通用的解決方案
這樣就會(huì)得到我們所定義的permission對(duì)象了。而且Django會(huì)為每個(gè)permission賦予一個(gè)全局唯一的code,規(guī)則:
權(quán)限的授予可以通過user或者group來進(jìn)行。
user通過user_permissions屬性設(shè)置permission,group通過permissions屬性設(shè)置permission。
官網(wǎng)示例如下:
權(quán)限的校驗(yàn) 在view中校驗(yàn)權(quán)限 利用decorator校驗(yàn)官網(wǎng)示例如下:
注意:permissions除了用string指定單個(gè)權(quán)限之外,還支持list以及tuple用于多個(gè)權(quán)限。
利用Mixin校驗(yàn)官網(wǎng)示例如下:
在template中校驗(yàn)權(quán)限如果在Django的settings里面設(shè)置了django.contrib.auth.context_processors.auth,以及啟用了RequestContext的話,那Django就會(huì)默認(rèn)在template中傳遞兩個(gè)變量:
{{ user }}
{{ perms }}
其中的{{ perms }}變量就可以實(shí)現(xiàn)在template使用permission,從而達(dá)到通過不同的permission提供不同的template的功能。
實(shí)際上Django在template當(dāng)中對(duì)于permission的使用提供了兩個(gè)API的功能,一個(gè)是User.has_module_perms;另一個(gè)是User.has_perm。
當(dāng)你在template中使用{{ perms.foo }}的時(shí)候就會(huì)調(diào)用User.has_module_perms方法,如果用戶具有foo這個(gè)permission的話,這個(gè)值就會(huì)為True。
當(dāng)你在template中使用{{ perms.foo.can_vote }}的時(shí)候就會(huì)調(diào)用User.has_perm方法,如果用戶具有foo.can_vote這個(gè)permission的話,這個(gè)值就會(huì)為True。
permission在template中的使用示例:
官網(wǎng)認(rèn)證系統(tǒng)文檔
官網(wǎng)ContentType文檔
官網(wǎng)自定義校驗(yàn)文檔
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/38205.html
摘要:前言對(duì)于前后端分離大家可能在網(wǎng)上可以找到很多的文章。但是,我們今天分享的文章的英文我們的老師對(duì)于前后端的分離問題的多年工作經(jīng)驗(yàn)的總結(jié)。今天,我們把這些經(jīng)驗(yàn)總結(jié)知識(shí)點(diǎn)分享給大家,希望可以幫助到大家。添加開啟黑白名單,任選其一。 前言 對(duì)于前后端分離大家可能在網(wǎng)上可以找到很多的文章。但是,我們今天分享的文章的英文我們的老師對(duì)于前后端的分離問題的多年工作經(jīng)驗(yàn)的總結(jié)。今天,我們把這些經(jīng)驗(yàn)總結(jié)知...
摘要:解決虛擬環(huán)境下不能使用提升權(quán)限問題問題描述在虛擬環(huán)境下,執(zhí)行某些命令需要有提升權(quán)限,會(huì)導(dǎo)致該條命令退出虛擬環(huán)境如啟動(dòng)服務(wù),需要監(jiān)聽端口此時(shí)會(huì)提示權(quán)限不足,無法訪問端口。 解決Python虛擬環(huán)境下不能使用sudo提升權(quán)限問題 問題描述 在虛擬環(huán)境下,執(zhí)行某些命令需要有sudo提升權(quán)限,會(huì)導(dǎo)致該條命令退出虛擬環(huán)境: 如啟動(dòng)django 服務(wù),需要監(jiān)聽80端口: $: python ma...
摘要:未經(jīng)身份驗(yàn)證的請求應(yīng)具有完全只讀訪問權(quán)限。其中一個(gè)字段將用于表示創(chuàng)建代碼段的用戶。唯一的限制是所包含的必須使用命名空間。中文教程序列化中文教程請求和響應(yīng)中文教程基于類的視圖中文教程驗(yàn)證和權(quán)限中文教程關(guān)系和超鏈接中文教程中文教程模式和客戶端庫 目前,我們的API對(duì)誰可以編輯或刪除代碼段沒有任何限制。我們想要一些更高級(jí)的行為,以確保: 代碼段始終與創(chuàng)建者相關(guān)聯(lián)。 只有身份驗(yàn)證的用戶可以創(chuàng)建...
摘要:未經(jīng)身份驗(yàn)證的請求應(yīng)具有完全只讀訪問權(quán)限。其中一個(gè)字段將用于表示創(chuàng)建代碼段的用戶。唯一的限制是所包含的必須使用命名空間。中文教程序列化中文教程請求和響應(yīng)中文教程基于類的視圖中文教程驗(yàn)證和權(quán)限中文教程關(guān)系和超鏈接中文教程中文教程模式和客戶端庫 目前,我們的API對(duì)誰可以編輯或刪除代碼段沒有任何限制。我們想要一些更高級(jí)的行為,以確保: 代碼段始終與創(chuàng)建者相關(guān)聯(lián)。 只有身份驗(yàn)證的用戶可以創(chuàng)建...
摘要:未經(jīng)身份驗(yàn)證的請求應(yīng)具有完全只讀訪問權(quán)限。其中一個(gè)字段將用于表示創(chuàng)建代碼段的用戶。唯一的限制是所包含的必須使用命名空間。中文教程序列化中文教程請求和響應(yīng)中文教程基于類的視圖中文教程驗(yàn)證和權(quán)限中文教程關(guān)系和超鏈接中文教程中文教程模式和客戶端庫 目前,我們的API對(duì)誰可以編輯或刪除代碼段沒有任何限制。我們想要一些更高級(jí)的行為,以確保: 代碼段始終與創(chuàng)建者相關(guān)聯(lián)。 只有身份驗(yàn)證的用戶可以創(chuàng)建...
閱讀 1217·2021-09-30 09:47
閱讀 3769·2021-09-06 15:02
閱讀 1781·2021-09-01 10:46
閱讀 2364·2019-08-30 15:52
閱讀 601·2019-08-29 15:28
閱讀 1874·2019-08-29 15:08
閱讀 1154·2019-08-29 13:28
閱讀 2580·2019-08-29 12:19