Django【進階】權限管理


一、權限
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"

  

 
 
中間件應用
對請求進行判斷,無權限直接退出,登錄頁面除外
作業以上

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM