Python權限菜單實現

簡單一點 數碼 4

在本篇文章中,我們將通過編寫代碼來闡述如何使用Python構建一個完善的權限菜單。首先,我們需要明確權限菜單的功能和作用:用於控制用戶在系統內部訪問和操作的權限。同時,使用權限菜單可以增強系統的安全性,降低不必要的風險和誤操作。

1、權限菜單的設計

首先,我們需要定義一些重要的概念和變量:

class Menu:
    def __init__(self, title='', items=None):
        self.title = title
        self.items = [] if items is None else items
        
class MenuItem:
    def __init__(self, text='', action=None, submenu=None):
        self.text = text
        self.action = action
        self.submenu = submenu

在上述代碼中,我們定義了菜單(Menu)和菜單項(MenuItem)兩個類,用於描述權限菜單的基本結構。

菜單中包含標題(title)和菜單項(items)兩個屬性。菜單項是一個列表,其中每個元素為一個菜單項對象(MenuItem)。

菜單項(MenuItem)中包含文本(text)和動作(action)兩個屬性,以及子菜單(submenu)屬性。文本用於描述菜單項,動作用於處理用戶對菜單項的點擊操作,子菜單用於構建多級菜單。

2、權限菜單的實現

接下來,我們使用上述定義的菜單類和菜單項類來構建權限菜單。我們使用遞歸方式來構建多級菜單。

def make_menu():
    menu = Menu('權限菜單')
    item1 = MenuItem('用戶管理', submenu=Menu(items=[
        MenuItem('添加用戶', action=lambda: print('添加用戶')),
        MenuItem('刪除用戶', action=lambda: print('刪除用戶')),
        MenuItem('修改用戶', action=lambda: print('修改用戶')),
        MenuItem('查詢用戶', action=lambda: print('查詢用戶')),
    ]))
    item2 = MenuItem('角色管理', submenu=Menu(items=[
        MenuItem('添加角色', action=lambda: print('添加角色')),
        MenuItem('刪除角色', action=lambda: print('刪除角色')),
        MenuItem('修改角色', action=lambda: print('修改角色')),
        MenuItem('查詢角色', action=lambda: print('查詢角色')),
    ]))
    item3 = MenuItem('權限管理', submenu=Menu(items=[
        MenuItem('添加權限', action=lambda: print('添加權限')),
        MenuItem('刪除權限', action=lambda: print('刪除權限')),
        MenuItem('修改權限', action=lambda: print('修改權限')),
        MenuItem('查詢權限', action=lambda: print('查詢權限')),
    ]))
    item4 = MenuItem('退出', action=lambda: print('退出'))
    menu.items = [item1, item2, item3, item4]
    return menu

def show_menu(menu):
    for i, item in enumerate(menu.items):
        print(f'{i+1}. {item.text}')
    choice = input('請選擇:')
    try:
        choice = int(choice) - 1
        item = menu.items[choice]
        if item.submenu is not None:
            show_menu(item.submenu)
        elif item.action is not None:
            item.action()
        else:
            print('無效的菜單項!')
    except:
        print('無效的菜單項!')

在上述代碼中,我們定義了make_menu()函數,用於構建權限菜單。同時,我們定義了show_menu()函數,用於顯示並處理用戶在權限菜單中的操作。

make_menu()函數中,我們按照菜單的結構使用菜單項遞歸方式構建了一個五級菜單,包括用戶管理、角色管理、權限管理、退出。每個菜單項都包含一個動作來處理用戶點擊操作。

show_menu()函數中,我們使用循環方式顯示菜單,並使用輸入來獲取用戶輸入的菜單項。如果用戶選擇的菜單項包含子菜單,則遞歸調用show_menu()函數,否則執行對應的菜單項動作。

1、用戶權限控制

在系統中,我們通常需要對用戶的訪問和操作進行權限控制,以保證系統的安全性和完整性。下面,我們使用權限菜單來實現簡單的用戶權限控制。

def access_control():
    user = input('請輸入用戶名:')
    password = input('請輸入密碼:')
    # 鑒權操作...
    menu = make_menu()
    show_menu(menu)

在上述代碼中,我們定義了access_control()函數,用於實現用戶登錄和權限控制。用戶登錄成功後,系統將根據用戶所屬的角色來顯示相應的權限菜單。

為了簡化系統,我們省略了鑒權操作。實際應用中,我們需要根據用戶輸入的用戶名和密碼來驗證用戶的身份,通過後根據用戶所屬角色查詢其擁有的權限,然後構建相應的權限菜單。

2、用戶權限控制示例

為了演示系統的權限控制功能,我們使用一個簡單的用戶角色表(role_table)來定義不同用戶的權限,具體如下:

role_table = {
    'admin': {'users': ['add', 'delete', 'modify', 'query'],
              'roles': ['add', 'delete', 'modify', 'query'],
              'permissions': ['add', 'delete', 'modify', 'query']},
    'editor': {'users': ['query'],
               'roles': ['query'],
               'permissions': ['query']},
    'viewer': {'users': [],
               'roles': [],
               'permissions': ['query']},
}

在上述權限表中,三個角色(admin, editor, viewer)分別擁有不同的權限,包括用戶增刪改查、角色增刪改查、權限增刪改查等,以及查詢權限。

下面,我們使用一個簡單的示例來演示系統的權限控制功能。當用戶登錄成功後,將根據其所屬角色顯示相應的權限菜單。對於無權操作的菜單項,系統將給出相應的提示信息。

def access_control():
    user = input('請輸入用戶名:')
    password = input('請輸入密碼:')
    # 鑒權操作...
    
    roles = role_table.get(user, {})
    menu = make_menu()
    for item in menu.items:
        if item.text == '用戶管理':
            item.submenu.items = filter_items(item.submenu.items, roles.get('users', []))
        elif item.text == '角色管理':
            item.submenu.items = filter_items(item.submenu.items, roles.get('roles', []))
        elif item.text == '權限管理':
            item.submenu.items = filter_items(item.submenu.items, roles.get('permissions', []))
    show_menu(menu)

def filter_items(items, permissions):
    return [item for item in items if item.text.split()[0].lower() in permissions or not item.text.split()[0].isalpha()]

access_control()

在上述代碼中,我們實現了一個filter_items()函數,用於根據權限表過濾不屬於該角色的菜單項,並對於無權訪問的菜單項進行處理。

在access_control()函數中,我們根據用戶所屬的角色,將菜單項分別賦予用戶對應的權限,並使用show_menu()函數來顯示和處理菜單項的操作。

在本文中,我們使用Python編寫了一個完整的權限菜單系統。根據權限表和用戶角色,系統能夠動態顯示和控制用戶訪問和操作的權限。本文除了實現代碼之外,還介紹了權限菜單的基本設計和遞歸構建方法。希望讀者通過本文的學習,能夠初步掌握Python遞歸算法和菜單圖形界面的設計與開發。

回復

共1條回復 我來回復
  • 暫無回復內容