溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python權限控制模塊Casbin怎么使用

發(fā)布時間:2022-06-10 13:52:28 來源:億速云 閱讀:558 作者:iii 欄目:開發(fā)技術

這篇文章主要介紹了Python權限控制模塊Casbin怎么使用的相關知識,內(nèi)容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Python權限控制模塊Casbin怎么使用文章都會有所收獲,下面我們一起來看看吧。

簡介

Casbin是一個強大的、高效的開源訪問控制框架,其權限管理機制支持多種訪問控制模型。

casbin 的主要特性包括:

  • 支持自定義請求的格式,默認的請求格式為{subject, object, action};

  • 具有訪問控制模型 model 和策略 policy 兩個核心概念;

  • 支持 RBAC 中的多層角色繼承,不止主體可以有角色,資源也可以具有角色;

  • 支持超級用戶,如 root 或 Administrator,超級用戶可以不受授權策略的約束訪問任意資源;

  • 支持多種內(nèi)置的操作符,如 keyMatch,方便對路徑式的資源進行管理,如 /foo/bar 可以映射到 /foo*;

casbin 不做的事情:

  • 身份認證
    authentication(即驗證用戶的用戶名、密碼),casbin 只負責訪問控制。應該有其他專門的組件負責身份認證,然后由 casbin 進行訪問控制,二者是相互配合的關系;

  • 管理用戶列表或角色列表
    casbin 認為由項目自身來管理用戶、角色列表更為合適,casbin 假設所有策略和請求中出現(xiàn)的用戶、角色、資源都是合法有效的。

為什么我要使用 Casbin?

在我做的那么多的項目中,權限處理經(jīng)常是一個比較頭疼的問題,而且每個項目有不同的權限控制方式,我一直在想有沒有一種通用的權限控制框架,可以適用各種不同的權限控制,每個項目只要做簡單的修改就能完全適用,直到無意中看到 casbin 這個庫。

目前我只是在初步的嘗試使用,因此這里只做簡單的使用記錄,把我在項目中使用的記錄下來,供自己后面繼續(xù)研究使用,也算是給想要使用此庫的 pythoner 一個例子。

官方文檔地址

官方提供了一個非常好的編輯器,可以讓我們直接體驗和測試 casbin 的權限處理。

Python權限控制模塊Casbin怎么使用

我們簡單的以官方提供的例子來做一個說明,首先 Policy 里面配置的是權限策略,從權限策略中可以看出用戶 alice 擁有角色 data2_admin,而角色 data2_admin 對數(shù)據(jù) data2 有 read/write 權限,因此用戶 alice 對數(shù)據(jù) data2 擁有 read/write,可以看到下面的測試中也是 true。

以上就是我們使用編輯器測試權限的過程,只要搞清楚 RBAC 中權限關系就可以了。

PyCasbin 模塊的使用

casbin 支持多種權限模型,我們最常用的是 RBAC,我們就以這種模式為例,來介紹一下在 Python 中怎么來使用。

安裝:

pip install casbin

例子

1.初始化一個 enforcer,傳入兩個參數(shù):模型文件路徑和策略文件路徑;
模型文件和策略文件都可以到庫上下載,訪問 gitee,搜索 pycasbin,在 examples 目錄下載 rbac_model.conf

import casbin
e = casbin.Enforcer("path/to/model.conf", "path/to/policy.csv")

2.在你的代碼需要進行訪問控制的位置,加入如下鉤子;

sub = "alice"  # the user that wants to access a resource.
obj = "data1"  # the resource that is going to be accessed.
act = "read"  # the operation that the user performs on the resource.

if e.enforce(sub, obj, act):
    # permit alice to read data1
    pass
else:
    # deny the request, show an error
    pass

pycasbin 本身擁有很多操作方法,因為它支持多種權限模型,所有有些接口是針對特定的模型設計的,但是眾多的接口方法就會給用戶帶來困惑,因此我在這里只總結 RBAC 權限模型中我目前用到的這些接口,后期如果有新的接口使用,再加到文檔內(nèi)

在使用之前我們先分析一下常用的權限處理有哪些?

增加角色權限:

e.add_policy('super', 'user', 'add')

刪除角色權限:

e.remove_policy('super', 'user', 'add')

增加用戶權限:

e.add_permission_for_user('lisi', 'user', 'add')

刪除用戶指定權限:

e.delete_permission_for_user('lisi', 'user', 'add')

刪除用戶所有權限:

e.delete_permissions_for_user('zhangsan')

查詢用戶權限:

e.get_permissions_for_user('lisi')

增加用戶角色:

e.add_role_for_user('zhangsan', 'admin')

刪除用戶指定角色:

e.delete_role_for_user('zhangsan', 'admin')

刪除用戶所有角色:

e.delete_roles_for_user('zhangsan', 'admin')

查詢用戶角色:

e.get_roles_for_user('zhangsan')

刪除用戶:

e.delete_user('zhangsan')

刪除角色:

e.delete_role('admin')

刪除權限:

e.delete_permission('add')

判斷用戶權限

e.enforce('super', 'user', 'add')

權限測試

以上面的示例為例,權限策略如下:

p, data2_admin, data2, read
p, data2_admin, data2, write
p, data1_admin, data1, read
p, data1_admin, data1, write
g, alice, data1_admin
g, bob, data2_admin

根據(jù)我們的推斷用戶 alice 對數(shù)據(jù) data1 擁有 read 權限,使用 pycasbin 判斷權限是否正常:

e.enforce('alice', 'data1', 'read')
# 輸出 True

這就是我們目前需要用的的接口了,在官方文檔中告訴我們 casbin 不能用來做用戶管理和角色管理,建議由項目自身來管理用戶列表和角色列表,因此我們需要創(chuàng)建單獨的用戶表和角色表,只不過以前是通過外鍵的方式將他們關聯(lián)起來,現(xiàn)在只需要創(chuàng)建好表信息就行了,角色與用戶的關系將通過 casbin 進行管理。

關于“Python權限控制模塊Casbin怎么使用”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對“Python權限控制模塊Casbin怎么使用”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI