RBCA許可權管理筆記(具體實現一)

2021-10-23 20:09:26 字數 2749 閱讀 1168

views.py

目的: 主要實現將使用者所有的許可權,按照級別關係顯示到選單上

# 步驟一: 獲取使用者名稱

# 1.通過使用者名稱獲取該使用者的所有角色

username = request.get.get('u') # 獲取使用者名稱

# 步驟二 通過使用者名稱獲取所有角色列表

# 方式2.跨表操作: 跨兩張表直接根據獲取的使用者名稱獲取到該使用者名稱下的所有角色 獲取到角色列表

# ,

role_list = models.role.objects.filter(user2role__u__username=username)

# 使用者登入獲取的兩個值:第乙個所有許可權在 session 中放置

# 步驟三 根據角色列表,獲取到使用者所有的去重後的許可權,放置在session中;

# 我們可以通過表關聯以及反向關聯,直接換獲取到當前使用者對應角色的所有的許可權

# 通過該使用者的角色列表,間接獲取到該使用者對應角色的所有許可權

permission2action = models.permission2action.objects.\

filter(permission2action2role__r__in=role_list).\

values('p__url', 'a__code').distinct()

print(permission2action) # 這個 permission2action 暫時沒用

# 使用者登入獲取的兩個值:第二個 在選單中顯示的許可權, 去重然後再篩查 exclude(p__menu__isnull=true)

# 1.獲取使用者應該在頁面選單欄顯示的 許可權

menu_leaf_list = models.permission2action.objects. \

filter(permission2action2role__r__in=role_list). \

values('p_id', 'p__url', 'p__caption', 'p__menu').distinct().exclude(p__menu__isnull=true)

# 2.處理使用者擁有的許可權選單,讓許可權選單有級別關係,轉換成字段處理

menu_leaf_dict = {}

for item in menu_leaf_list: # 遍歷列表

item = ,

'status': true # 許可權狀態預設為 true

}if item['parent_id'] in menu_leaf_dict: # 判斷字典中是否存在這個選單所屬的父級選單id

else:

menu_leaf_dict[item['parent_id']] = [item] # 如果不存在,就建立乙個新的子字典

# 3. 獲取所有的選單的列表,獲取的值:選單的id,選單的名稱,選單的父級的id

menu_list = models.menu.objects.values('id', 'caption', 'parent_id')

# 將選單列表轉換成字典,字典的 key就是自己的id

menu_dict = {}

for item in menu_list: # 遍歷所有的選單列表

item['child'] = # 設定選單列表中的 child 為空

item['status'] = false # 設定選單列表中的 status 為 false

menu_dict[item['id']] = item

# 4.將使用者許可權的選單,新增到所有的總許可權選單中,使用者的許可權掛靠到選單

for k, v in menu_leaf_dict.items(): # 遍歷許可權字典

menu_dict[k]['child'] = v # 將 許可權字典中遍歷出來的值,新增到選單字典中,

menu_dict[k]['status'] = true # 設定選單字典中的 使用者許可權 k 為 true

parent_id = k

while parent_id:

menu_dict[parent_id]['status'] = true # 迴圈處理,所有的 k 的父節點的 status 都為 true

parent_id = menu_dict[parent_id]['parent_id'] # 這樣就可以設定 true 作為狀態判斷可見。

for k, v in menu_dict.items():

print(k, v)

# 5.處理選單等級關係 此時的 menu_dict 就是包含使用者許可權的所有選單,但是沒有等級關係

result = # 處理後的所有選單,以及許可權選單形成。用列表來進行顯示

for row in menu_dict.values(): # 遍歷掛靠後的許可權的值

if not row['parent_id']: # 如果這個值沒有 parent_id 就是沒有父級id,說明是根選單,那麼直接新增

else:

# 否則,用遍歷的值中的 parend_id作為 key 去查詢 許可權字典中的根選單,然後新增到其 child 中,形成了等級關係;

《玩轉細粒度許可權管理》 三,使用者角色許可權RBCA

第三章 使用者角色許可權rbca 第一章介紹了專業細粒度許可權管理軟體 metadmin 的安裝。第二章講解了對於 web 頁面的控制。哪些頁面需要登入才能訪問,哪些頁面不需要登入就能訪問。需要登入的頁面,又如何頁面訪問許可權呢?即具有什麼樣角色的人才能訪問。本章詳細講解使用者角色許可權關係。這也就...

許可權管理一

一 acl 許可權 如果我們只想要某一使用者對檔案或者有許可權,可以使用acl許可權。1 檢視acl是否開啟 default mount options user xattr acl 預設開啟 如果沒有開啟,手工開啟分割槽的 acl 許可權 root localhost mount o remoun...

Vuejs 實現許可權管理

程式執行時,router只配置登陸 首頁404 等基本頁面 import main from views main.vue 不作為main元件的子頁面展示的頁面單獨寫,如下 export const loginrouter component resolve export const page404...