一、權限
RBAC:role basic access control
1、什么是權限:
一個權限就是一個url,不同個權限對應不同的url,擁有權限即可以訪問這個url。
2、權限划分:
如果以每個人來划分權限,分配的時候回非常麻煩,特別是權限和人都非常多的時候
以角色來划分權限
二、做一個簡單權限管理系統
創建數據模型
############# 重點:我們做一個用於權限管理的app,可移植到其他項目 ###############
添加app,rbac是除了app01另外創建的應用,專用於權限管理,后面可以移植到其他項目
python manage.py startapp rbac
然后在settings的INSTALLED_APPS配置中加入‘rbac'
將表注冊到admin,當然是’rbac'的admin中
創建管理員python manage.py createsuperuser
admin后台添加菜單,
以及其他數據
127.0.0.1:8000/admin
urls
views(app01/views,調用rbac應用來實現權限功能)
##################### 這里給rbac寫一個配套的初始化權限的服務 ###################
寫一個專門用於獲取用戶權限的初始化服務
from django.conf import settings
from .. import models
def init_permission(request,user_obj):
"""
初始化用戶權限
:param request:
:param user_obj:
:return:
"""
# distinct()去掉重復,values可以取roles對應的多對多的表的字段
permission_item_list = user_obj.roles.values('permissions__title','permissions__url',
'permissions__menu_id').distinct()
# 保存當前用戶有權訪問的URL
permission_url_list = []
# 保存當前用戶有權訪問的URL且需要在菜單上顯示
permission_menu_list = []
for item in permission_item_list:
"""
循環這個query_set集合,取需要的數據
"""
permission_url_list.append(item['permissions__url'])
if item['permissions__menu_id']:
temp = {'title':item['permissions__title'],'url':item['permissions__url'],
'menu_id':item['permissions__menu_id']}
permission_menu_list.append(temp)
# 所有菜單
menu_lsit = list(models.Menu.objects.values('caption','parent_id'))
request.session[settings.SESSION_PERMISSION_URL_KEY] = permission_url_list
request.session[settings.SESSION_PERMISSION_MENU_URL_KEY] = {
settings.PERMISSION_URL_KEY:permission_menu_list,
settings.ALL_MENU_KEY: menu_lsit, }
################ 為了寫入session方便,我們在settings配置session鍵 ########################
#########################################################
# rbac 權限相關配置 #
#########################################################
# 保存用戶權限的session key
SESSION_PERMISSION_URL_KEY = "sanhdfiuhasakdjflkajsf"
SESSION_PERMISSION_MENU_URL_KEY = "sjdiuwekljdsksdfjlskdsd"
ALL_MENU_KEY = "k1"
PERMISSION_URL_KEY = "k2"
中間件應用
對請求進行判斷,無權限直接退出,登錄頁面除外
作業以上
