許可權元件之rbac

2021-08-23 14:43:46 字數 4633 閱讀 4286

rbac:基於角色的許可權訪問控制(role-based access control)。

rbac的主要流程:給每個角色賦予不同的許可權,是這個角色的員工都有這個角色的所有許可權。乙個角色可以有多個人員擔任,乙個員工可以擔任多個角色(比如部門經理、業務員等)。當員工成功登陸系統時,系統需要獲取這個員工的多有許可權,並放到乙個列表裡面。然後員工在訪問每個許可權url時,系統需要進行判斷該員工有沒有這個許可權進行這項操作。如何判斷?就是迴圈這個員工的所有許可權,看有沒有對應的許可權。這裡用到了re模組裡面的match方法。

如下**:

# 需要先登陸,拿到該員工的許可權列表並去重

deflogin(request):

if request.method=="

get"

:

return render(request,"

login.html")

else

: user=request.post.get("

user")

pwd=request.post.get("

pwd"

) user=userinfo.objects.filter(name=user,pwd=pwd).first()

ifuser:

#驗證成功之後做什麼?

request.session["

user_id

"]=user.pk # 設定session

#當前登入使用者的所有許可權, distinct()是去掉重複的許可權

permission_info=user.roles.all().values("

permissions__url

","permissions__title

").distinct()

temp= # 該員工的全部許可權url列表

登入成功!")

else

:

return redirect("

/login/

")

登陸成功之後,判斷檢視使用者操作許可權

拿到訪問的路徑

permission_list = request.session.get("

permission_list

") #

取session,從session表裡面取到這個員工的所有許可權 ['/order/', '/users/']

if not permission_list: # 使用者沒有登陸,取不到許可權列表

#/users/edit/3 為什麼要用正則,因為/users/edit/3 與/users/edit/(/d+)不能直接匹配

import

re flag = false #

加上標誌位

for permission_url in

permission_list:

ret = re.match(permission_url, current_path) #

用正則去匹配具體的路徑,成功則返回物件, 否則返回none

if ret: #

如果返回物件

沒有訪問許可權")

使用者列表

") # 有許可權

接下來通過中介軟體來實現這個功能

再建立乙個應用名字叫做rbac(當然也可以放到同乙個應用裡面),這個應用裡面建立乙個包service,包裡建立乙個名字為permission_li.py的檔案。

拿到訪問的路徑

permission_list = request.session.get("

permission_list

") #

從session表裡面取到這個員工的所有許可權 ['/order/', '/users/']

#/users/edit/3 為什麼要用正則,因為/users/edit/3 與/users/edit/(/d+)不能直接匹配

import

re flag = false #

加上標誌位

for permission_url in

permission_list:

ret = re.match(permission_url, current_path) #

用正則去匹配具體的路徑,成功則返回物件, 否則返回none

if ret: #

如果返回物件

沒有訪問許可權

")

settings.py裡面

middleware =[

'django.middleware.security.securitymiddleware',

'django.contrib.sessions.middleware.sessionmiddleware',

'django.middleware.common.commonmiddleware',

'django.middleware.csrf.csrfviewmiddleware',

'django.contrib.auth.middleware.authenticationmiddleware',

'django.contrib.messages.middleware.messagemiddleware',

'django.middleware.clickjacking.xframeoptionsmiddleware',

'rbac.service.permission_li.m1

', # 加在這裡

]

接下來的問題就是,加上中介軟體之後,登陸頁面也沒有許可權訪問了。

我們新增白名單,登陸、註冊和admin頁面加里即可。

沒有許可權

")

rbac許可權管理設計 RBAC使用者角色許可權設計方案

rbac role based access control,基於角色的訪問控制 就是使用者通過角色與許可權進行關聯。簡單地說,乙個使用者擁有若干角色,每乙個角色擁有若干許可權。這樣,就構造成 使用者 角色 許可權 的授權模型。在這種模型中,使用者與角色之間,角色與許可權之間,一般者是多對多的關係。...

rbac元件引用

待新增 路由系統中有,但是資料庫中還沒有 路由系統的集合 資料庫中許可權集合 待更新 路由系統中有,資料庫中也有,只是更改了一些資訊 路由系統的集合 資料庫中的許可權集合 待刪除 資料庫中有,路由中沒有的 資料庫許可權集合 路由系統集合 2.資料庫遷移 1.使用者表的繼承 class user mo...

RBAC許可權管理

rbac role based access control,基於角色的訪問控制 就是使用者通過角色與許可權進行關聯。簡單地說,乙個使用者擁有若干角色,每乙個角色擁有若干許可權。這樣,就構造成 使用者 角色 許可權 的授權模型。在這種模型中,使用者與角色之間,角色與許可權之間,一般者是多對多的關係。...