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条回复 我来回复
  • 暂无回复内容