許可權系統的應用
阿新 • • 發佈:2018-11-05
許可權系統的應用
1. 拷貝rbac 到新專案中
2. 註冊rbac APP 以及配置資訊
PERMISSION_SESSION_KEY = 'permissions'
MENU_SESSION_KEY = 'menus'
WHITE_URL_LIST = [
r'/login/$',
r'^/logout/$',
r'^/reg/$',
r'^/admin/.*',
]
3. 資料庫遷移
刪除原有的遷移檔案的記錄
執行命令
4. 在根目錄下的urls.py中新增rbac的相關URL
# 許可權的url
url(r'rbac/', include('rbac.urls',namespace='rbac')),
5. 錄入許可權資訊
- 角色管理
- 選單管理
- 許可權管理
路由中必須有name
寫出許可權列表
- 錄入原系統的URL
- 錄入rbac的URL
- 許可權批量操作的檢視中ignore_namespace_list中去掉rbac
# 獲取路由系統中所有URL
router_dict = get_all_url_dict(ignore_namespace_list=['admin'])
新增父許可權,必須先選擇所屬選單,然後必須更新一下 新增父許可權 就會有所需求的資訊
6. 分配許可權
- 使用者關聯
from rbac.models import User
user = models.OneToOneField(User, null=True, blank=True)
- 給使用者分角色
- 給角色分許可權
在2個表建立關聯 改表內容
7. 登入應用許可權
匯入許可權的那個函式
from rbac.server.init_permission import init_permission
- 登入成功後執行init_permission(request, obj)
ret=init_permission(request,obj)
if ret:
return ret
- 修改init_permission(函式)
user ——》 user.user
try:
permission_query = user.user.roles.filter(permissions__url__isnull=False).values(
'permissions__url',
'permissions__title',
'permissions__id',
'permissions__name',
'permissions__parent_id',
'permissions__parent__name',
'permissions__menu_id',
'permissions__menu__title',
'permissions__menu__icon',
'permissions__menu__weight',
).distinct()
except Exception as e:
return HttpResponse('請聯絡管理員:電話:110') - 應用許可權校驗中介軟體
'rbac.middlewares.rbac.PermissionMiddleware',
8. 應用二級選單和麵包屑導航
注意模板 layout
有block css js content
- 二級選單
<link rel="stylesheet" href="{% static 'css/menu.css' %}">
{% load rbac %}
{% menu request %}
<script src="{% static 'js/menu.js' %}"></script>
- 麵包屑導航
{% breadcrumb request %}
9. 許可權控制到按鈕級別
{% load rbac %} {% if request|has_permission:'add_customer' %}
<a href="{% url 'add_customer' %}?{{ query_params }}" class="btn btn-primary btn-sm">新增</a>
{% endif %}
1. 拷貝rbac 到新專案中
2. 註冊rbac APP 以及配置資訊
PERMISSION_SESSION_KEY = 'permissions'
MENU_SESSION_KEY = 'menus'
WHITE_URL_LIST = [
r'/login/$',
r'^/logout/$',
r'^/reg/$',
r'^/admin/.*',
]
3. 資料庫遷移
刪除原有的遷移檔案的記錄
執行命令
4. 在根目錄下的urls.py中新增rbac的相關URL
# 許可權的url
url(r'rbac/', include('rbac.urls',namespace='rbac')),
5. 錄入許可權資訊
- 角色管理
- 選單管理
- 許可權管理
路由中必須有name
寫出許可權列表
- 錄入原系統的URL
- 錄入rbac的URL
- 許可權批量操作的檢視中ignore_namespace_list中去掉rbac
# 獲取路由系統中所有URL
router_dict = get_all_url_dict(ignore_namespace_list=['admin'])
新增父許可權,必須先選擇所屬選單,然後必須更新一下 新增父許可權 就會有所需求的資訊
6. 分配許可權
- 使用者關聯
from rbac.models import User
user = models.OneToOneField(User, null=True, blank=True)
- 給使用者分角色
- 給角色分許可權
在2個表建立關聯 改表內容
7. 登入應用許可權
匯入許可權的那個函式
from rbac.server.init_permission import init_permission
- 登入成功後執行init_permission(request, obj)
ret=init_permission(request,obj)
if ret:
return ret
- 修改init_permission(函式)
user ——》 user.user
try:
permission_query = user.user.roles.filter(permissions__url__isnull=False).values(
'permissions__url',
'permissions__title',
'permissions__id',
'permissions__name',
'permissions__parent_id',
'permissions__parent__name',
'permissions__menu_id',
'permissions__menu__title',
'permissions__menu__icon',
'permissions__menu__weight',
).distinct()
except Exception as e:
return HttpResponse('請聯絡管理員:電話:110') - 應用許可權校驗中介軟體
'rbac.middlewares.rbac.PermissionMiddleware',
8. 應用二級選單和麵包屑導航
注意模板 layout
有block css js content
- 二級選單
<link rel="stylesheet" href="{% static 'css/menu.css' %}">
{% load rbac %}
{% menu request %}
<script src="{% static 'js/menu.js' %}"></script>
- 麵包屑導航
{% breadcrumb request %}
9. 許可權控制到按鈕級別
{% load rbac %} {% if request|has_permission:'add_customer' %}
<a href="{% url 'add_customer' %}?{{ query_params }}" class="btn btn-primary btn-sm">新增</a>
{% endif %}