原理:
1、簡單管理
2、角色多管理(就要設置權限)
a. 登錄
- session中放置用戶信息(檢測是否已經登錄)
- session中放置權限信息(檢測是否有權訪問)
{
"/index.html":[get,delete,select ,update],
"/order.html":[get,delete,select ,update],
}
- session中放置菜單,權限信息(用於生成多級的動態菜單)。就不用每次在數據庫里面去取數據了
b. 訪問網站其他功能:http://www.baidu.com/xxx.html
- 獲取當前訪問的url,request.path_info
-
匹配/xxx.html?md=get
根session里面的權限信息進行匹配(檢測是否有權訪問)
{
"/index.html":[get,delete,select ,update],
"/order.html":[get,delete,select ,update],
"/xxx.html":[get,delete,select ,update],
}
如果匹配成功之后,在進行一次匹配
第一次匹配的是url,第二次匹配的是方法
request.permission_code = "get"
request.permission_code = [get,delete]
目的是傳到視圖函數,當視圖函數寫業務邏輯的時候根據這兩個值來判定視圖該怎么寫
ps:兩次匹配的時候都是用中間件來實現的
c.在視圖中:
得到這兩個值,
request.permission_code = "get" #業務邏輯的增加,修改等
request.permission_code = [get,delete] #為了給前端顯示功能按鈕
e.創建動態菜單【多級菜單】
- 當前用戶的權限(從數據庫獲取,但是這樣每次請求數據庫效率不高,可以放置在session中)
- 所有的菜單 (從數據庫獲取)
- 讓權限和菜單實現掛靠
這個菜單只是在頁面上使用,推薦用simple_tag來用
1、權限掛到菜單上
2、菜單父子關系處理
3、遞歸生成菜單
輔助:
css
js
基本使用:
1、導入rbac
- 表
- 中間件
- service 初始化操作
- simple_tag
2、注冊app
3、用戶登錄
初始化權限信息:service.init_permission(request,user_id)
本質就是吧權限的信息和菜單的信息放在session中
4、在settings中配置中間件
5、導入{% rbac_menu request %}
其他配置
....