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