Django-guardian實現對象級別的權限控制

2020-09-05 輕編程

概述

django-guardian是為Django提供額外的基於對象權限的身份驗證後端。

特徵

  • Django的對象全新啊
  • 匿名用戶的支持
  • 高級API
  • 經過嚴密測試
  • Django admin的整合
  • 裝飾器

安裝

要求Django1.7或更高版本

pip install django-guardian

easy_install django-guardian

配置

安裝完成後,我們可以將django-guardian加入到我們的項目。首先在settings裡將guardian加入到INSTALLED_APPS

INSTALLED_APPS = ( 39;guardian&39;django.contrib.auth.backends.ModelBackend& 這是Django默認的 &39;, Create your models here.class Task(models.Model): summary = models.CharField(max_length=32) content = models.TextField() reported_by = models.ForeignKey(User) created_at = models.DateTimeField(auto_now_add=True) class Meta: permissions = ( (&39;, &39;), )

說明:permissions使我們自定義的權限,當我們調用migrate命令的時候,view_task將會被添加到默認的權限集合中。 默認情況下Django為每個模型註冊3個權限 * add_模型名 * change_模型名 * delete_模型名

分配對象權限

我們可以使用guardian.shortcuts.assign_perm()方法可以為用戶/組分配對象權限

為用戶分配權限

>>> from django.contrib.auth.models import User>>> from todo.models import Task>>> from guardian.shortcuts import assign_perm>>> boss = User.objects.create(username=&34;) 34;joe& 創建用戶joe>>> task = Task.objects.create(summary=&34;, content=&34;, reported_by=boss) 39;view_task& 默認用戶對這個對象沒有權限False>>> assign_perm(&39;, joe, task) 39;view_task&34;employees&34;change_task&34;jack&39;change_task&39;change_task&39;change_task&39;change_task&39;view_task&39;todo.change_task&39;todo.view_task&39;view_task&39;change_task&34;context_var&34;veiw_task&39;guardian.UserObjectPermission&34;view_task&34;view_task&39;guardian.UserObjectPermission&34;view_task", task)False

Django admin集成

Django配有優秀和廣泛使用的admin應用程式。它為Django應用程式提供基本的內容管理。具有訪問管理面板的用戶可以管理系統提供的用戶,組,權限和其他數據。

django-guardian 為Django的admin提供簡單的對象許可管理集成。

(此處已添加圈子卡片,請到今日頭條客戶端查看)

如果在這裡學到了知識,那麼請關注我或加入圈子一起交流學習,這裡將持續更新關於django的更多好內容。

相關焦點

  • 「Django」RBAC權限管理系統模塊-理解
    分享部分代碼供參考,就是先通過用戶判斷組別,然後在進行數據過濾篩選所謂對象級權限,即針對的Model對象實例進行授權操作,使用我們可以精確的對單個對象進行權限的控制,以實現更細精度的權限控制。結合上文對象級權限中新聞發布的例子,如果使用對象級權限的方式來實現的話,我們就必需在用戶發布新聞的同時,向對象級權限系統中添加一條權限分配的記錄(對象級權限系統是需要獨立的數據表來記錄用戶或組與對象的權限關係),這好像也沒什麼問題,無非是重寫save方法或都添加一條signals就可以應對了,但如果我們希望用戶的上級領導也能夠修改該信息呢,你可能會說給上級領導也添加一條對象級權限啊,但如果該用戶的上級領導變更了呢
  • Django認證系統
    前言Django的簡單認證系統,後期會分享一些對象級別的權限校驗。Django admin 站點使用如下的權限:擁有該類型對象"add"權限的用戶才可以訪問"add"表單以及添加一個該類型對象。查看修改列表、查看「change」表單以及修改一個對象的權利只限於具有該類型對象的「change」權限的用戶擁有。
  • 基於Sentry實現數據訪問權限控制
    授權粒度Sentry數據訪問授權的實現依賴於授權對象和操作,授權對象定義要受授權規則約束的對象,可以是伺服器(server)、資料庫、表、視圖甚至是列;操作定義運行的操作粒度,包括查找(select)、刪除(delete)、創建(create)等。授權對象和操作級別的組合模式提供了不同特權級別的訪問控制。
  • 如何輕鬆了解 Python 必學的 django 框架?
    django 框架配有一個功能強大的管理站點,裡面已經預定義了許多管理站點需要進行的操作,但是有時可能默認的操作不能滿足需求,如需要批量更新選中的對象,這需要編寫自定義 action 實現。本文基於 django 官方英文文檔梳理了一下自定義管理操作需要做的工作,方便快速了解自定義管理操作的實現過程。
  • 教你三步實現Django Paginator 分頁
    Django提供了一個新的類來幫助管理分頁數據,這個類存放在django/core/paginator.py.它可以接收列表、元組或其它可迭代的對象。本文將分三步介紹Django Paginator 分頁的實現步驟。
  • 基於django的單元測試
    【知道】認識單元測試單元測試:測類、方法、函數,測試最小單位由於django的特殊性,通過接口測單元,代碼邏輯都放在類視圖中單元測試好處消滅低級錯誤快速定位bug(有些分支走不到,通過單元測試提前測出問題)提高代碼質量(測試後順便優化代碼)2.
  • Django 教程——Django中的視圖
    每個視圖函數都將HttpRequest對象作為其第一個參數,通常將其命名為request該視圖返回一個HttpResponse對象,其中包含生成的響應。每個視圖函數負責返回HttpResponse對象有關HttpRequest和HttpResponse的更多信息,請訪問-Django請求和響應周期- HttpRequest和HttpResponse對象讓我們在geeks/urls.py,from django.urls import path# importing views from views..pyfrom .views
  • Django結合Websocket進行WebSSH的實現
    泛指一種技術可以在網頁上實現一個 終端。從而無需 之類的模擬終端工具進行 連接,將 這一比較低層的操作也從 架構扭成了 架構 這樣的架構常用在運維製作開發一些堡壘機等系統中,或是目前比較新型的在線教育方式,通過向學生提供一個可以直接使用瀏覽器進行相關 操作或代碼編寫的學習方式 主要是建立客戶端與服務端的即時通信。
  • javaEE開發必用的技術 ssm框架+shiro框架實現權限控制及認證
    本文將使用spring,springmvc,mybatis,shiro都是最新版本的框架+JDK1.8完成用戶登錄模塊的DEMO,該DEMO具備較完善的功能,大部分項目都要做權限控制,大部分項目的思路都可以用來參照。
  • 10道題教你使用python Django框架來實現web應用,值得收藏
    6、本來是準備開發一個web應用,主要是網站和客戶端(pda)訪問,現在網站使用django很方便就完成了,那在客戶端(pda)上面的想法是用webservice,也不知道可以直接使用django實現。能不能不用webservice,直接django搞定,希望能得到解決方案並普及一下知識?
  • Spring Security基於表達式的權限控制
    Spring Security源碼分析十三:Spring Security 基於表達式的權限控制Spring Security是一個能夠為基於Spring的企業應用系統提供聲明式的安全訪問控制解決方案的安全框架。
  • Django 之中間件7個保安
    官方表達:中間件是一個用來處理Django的請求和響應的框架級別的鉤子。它是一個輕量、低級別的插件系統,用於在全局範圍內改變Django的輸入和輸出。每個中間件組件都負責做一些特定的功能。大白話:中間件就是默認的7個保安,數據來了由外向內一層一層過,數據走了由內向外一層一層過。當某一層不通過就返回報錯信息。
  • 用django開發一個管理系統有多簡單?不用寫代碼的妹子都會
    django是python中最流行的一個web框架,django為廣大開發者提供了非常便捷的開發模式。高度封裝ORM,不用寫一句代碼,只要定義了model就可以實現增刪改查。而django自帶的admin更是強大到令人髮指。定義model註冊admin,2個步驟,就能實現一個模塊的增刪改查。
  • Django中的Q查詢和F查詢
    F()表達式2.1 進行+1操作  一個F()對象代表一個模型欄位的值或注釋列。使用它可以直接引用模型欄位的值並執行資料庫操作而不用把它們導入到python的內存中。相反,Django使用F()對象生成一個描述資料庫級別所需操作的SQL表達式。
  • 基於角色的權限控制理論
    反應在軟體系統上,就是用戶根據註冊的帳戶登陸系統,根據其所具有的權限,對工作對象進行數據的採集錄入,根據工作對象的反饋,對錄入系統的數據進行查詢,更新和刪除等操作。對於用戶的基本操作,因其被系統所賦予的角色,而限定了其操作的範圍(權限)。在系統中,用戶的屬性有:用戶的基本信息、用戶的單位信息(一般情況下,用戶所在單位決定用戶角色的方向)、用戶的角色信息、用戶的權限信息。
  • python Web開發:Django重定向總結part3,具體實現Django重定向
    Django實現重定向引文:前兩天我們為在Django中怎樣進行重定向做了技術儲備python Web開發:Django重定向總結part1,為什麼要重定向?HttpResponse對象這個解決方案在技術上是正確的,但它涉及相當多的輸入。
  • 初識Django(七):模型
    與直接創建並操作資料庫不同,django提供了另外一種更簡單的方式在後端對數據進行操作,也就是:django提供了一系列函數讓你在直接操作數據,而不需要關注資料庫方面的內容,這種方法被稱為對象關係映射(Object Relational Mapping,ORM)。
  • Linux的ACL權限實現原理及實現詳解
    一篇文章了解Linux作業系統的權限管理2. Linux安全模塊框架(LSM)原理與代碼實現解析3. Linux的RWX權限管理實現詳解及chmod使用如果閱讀本文時發現有不清楚的地方,歡迎大家留言。作者會儘量回答大家的問題。前面我們介紹了RWX-UGO的權限控制方法,但是這種方法過於簡單,很多場景無法滿足要求。因此,在Linux中還有另外一套權限控制方法,也就是ACL控制方法。
  • 使用jqueryui tabs優化django後臺頁面
    其中我開發公司內部的ERP系統就還一直使用django admin(又不是不能用,嘻嘻)。但是我對django admin有點不滿的就是編輯表單頁面。我以下面帳號表單為例,django admin的表單頁面會一下子展示很多信息給用戶看。除了首行的用戶名和密碼、還把「個人信息」標籤、「權限」等等都一起顯示了出來。
  • drf RBAC 權限六表
    目錄APIView的請求生命周期三大認證規則RBAC權限六表自定義User表詳細配置演示models.pysetting.pyadmin.py使用過程:控制填寫信息的欄位控制添加權限控制後臺用戶展示頁添加組權限導入做項目是否要分表管理前後臺用戶總結