在 rbac 的基礎(chǔ)上繼續(xù)

權(quán)限-路由
我們可以人為的認為 /customer/list 可以作為一個菜單,但是機器不知道,所以我們要告訴機器,這個路由可以做菜單
流程
- 告訴機器那些路由可以作為菜單
- 修改表結(jié)構(gòu)
- 將這些可以作為菜單的路由,單獨儲存起來
- 將菜單信息儲存到 session 中
- 獲取菜單信息并展示
實踐
修改表結(jié)構(gòu)
在 rbac 的表結(jié)構(gòu)上給 權(quán)限表添加兩個字段

添加的兩個字段
重點: 儲存給 session 的結(jié)構(gòu)
用戶登錄時要做兩件事:
- 儲存 權(quán)限列表
- 儲存 菜單列表
獲取權(quán)限/菜單信息
ret = obj.roles.filter(permissions__url__isnull=False).values( xxx ).distinct()
# 權(quán)限列表
permission_list = []
# 菜單列表
menu_list = []
for i in ret:
# 僅記錄 權(quán)限路由,標(biāo)題....就不記錄了
permission_list.append({'url':i['permission__url']})
if i['is_menu']:
menu_list.append(
{
'url':i['permission__url'],
'title':i['permission__title'],
'icon':i['permission__icon'],
}
)
request.session['儲存在settings中的常量'] = permission_list
request.session['儲存在settings中的常量'] = menu_list
還是利用 inclusion_tag 返回自定義HTML片段
補充:
選中菜單的狀態(tài)

加 active 類 就可以選中
這有兩種方法:
- 前端做
用 JS 代碼 location.href 可以獲取當(dāng)前路由,
隨后進行循環(huán)匹配,匹配成功后加類 active
缺點: 有延遲,循環(huán)也需要時間
- 后端做
因為我們是用 inclusion_tag 返回的自定義HTML代碼片段,
所以我們可以在返回代碼之前進行匹配
方法
返回的HTML代碼片段

