IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 【Python】基于自定义权限编码的树状权限管理系统设计 -> 正文阅读

[Python知识库]【Python】基于自定义权限编码的树状权限管理系统设计

目标

权限管理是企业实现安全管理的必要因素,如何设计权限控制让员工在不越界的情况下还能自由发挥是权限管理系统设计的难题。

资金充足的企业往往会选择购买市场上OA系统,每年付费几十万,省去了设计维护系统之余,还提高了员工的办公效率。主流的OA系统有泛微的e-cology。
在这里插入图片描述

而对于一些私企,往往会选择自己搭建系统网站,每年省下一大笔支出,同时还保护了公司的商业机密。而这样这些网站,往往需要开发工程师设计一个合理实用的权限管理系统。

而本文将基于自定义权限编码设计树状权限管理系统,给公司网页各功能进行权限的编码,并给员工授予相应的权限编码,实现了权限的严格且合理的划分,管理员更为便利地给各部门员工授权。

权限编码

本文基于python字典格式设计了一款编码,可以将树状的权限以字典的形式进行编码,同时通过解析字典来解码,获取相应的权限信息。
在这里插入图片描述

树状字典

首先将树状权限转换成python字典,以字典包含字典的方法实现树状结构。

num = {
    '运营': {
        '数据库': {
            '运营数据库': 0,
            '产品数据库': {
                '产品查询': 0,
                '下单价格': 0
                        }
                },
        '数据分析':0,
        '订单管理':{
            '订单文件': 0
                }
            },
    
    '人事': {
        '数据库': {
            '人事数据库': {
                '员工信息': 0,
                '人事结构': 0
                            },
                },
        '数据分析':{
            '打卡出勤': 0,
            '绩效': 0
                },
        '订单管理':0
            }
}

转换数字字典,便于数据存储和解码。可以看到,以权限的先后顺序进行1,2,3,…编码。比如在一层中,部门以1,2分别表示运营和人事。而在第二层中,以1,2,3分别表示数据库,数据分析和订单管理这三个大权限。而后面的小权限也依次以数字进行表示。

下面的num字典为具备所有权限的编码。

而user_code字典为只具备运营的部分权限的编码,且不具备查看订单文件的权限。说明权限限制可以通过直接删除那里的字典,或者让字典的值为0,来达到权限限制。

num = {
    '1': {
        '1': {
            '1': 0,
            '2': {
                '1': 0,
                '2': 0
                        }
                },
        '2':0,
        '3':{
            '1': 0
                }
            },
    
    '2': {
        '1': {
            '1': {
                '1': 0,
                '2': 0
                            },
                },
        '2':{
            '1': 0,
            '2': 0
                },
        '3':0
            }
}


user_code = {
    '1': {
        '1': {
            '1': 0,
            '2': {
                '1': 0,
                '2': 0
                        }
                },
        '2':0,
        '3':0
            }
    
}

权限解码

权限列表

要实现权限解码,需要建立权限列表,列表里面存放相应的权限函数。比如’database’, ‘analysis’, 'order’等,这些权限函数可以是页面对应的后端函数,执行函数前先进行权限判断,从而使用权限的管理。

权限列表的命名需严格规范,比如list_0_1_1_2 表示运营1-数据库1-产品数据库2里面的函数,有’search’, ‘price’
根据编码好的树状字典,编写权限列表。解码的时候,便根据编码解码,得到该员工所拥有的权限函数。

# list_0 = ['运营', '人事']
list_0 = ['', '']


# list_0_1 = ['数据库', '数据分析', '订单管理']
list_0_1 = ['database', 'analysis', 'order']

# list_0_1_1 = ['运营数据库', '产品数据库']
list_0_1_1 = ['operational_database', 'product_database']

# list_0_1_1_2 = ['产品查询', '下单价格']
list_0_1_1_2 = ['search', 'price']

list_0_1_3 = ['订单文件']
list_0_1_3 = ['file']


# list_0_2 = ['数据库', '数据分析', '订单管理']
list_0_2 = ['database', 'analysis', 'order']

list_0_2_1 = ['人事数据库']
list_0_2_1 = ['hr_database']
# list_0_2_1_1 = ['员工信息', '人事结构']
list_0_2_1_1 = ['staff', 'personnel']


nist_0_2_2 = ['打卡出勤', '绩效']
list_0_2_2 = ['card', 'achievements']

解码

这里是根据获取的权限编码,逐层解码

for key0 in dict0.keys():  # 组织   ('运营', '人事')
    a1 = key0
    pm1 = locals()['list_0'.format(a1)][int(a1) - 1]
    permission_list.append(pm1)
    if (dict0[a1] != 0):
        dict1 = dict0[a1]
        for key1 in dict1.keys():  # 第一层权限   ('数据库', '数据分析', '订单管理')
            a2 = key1
            pm1 = locals()['list_0_{}'.format(a1)][int(a2) - 1]  # 从对应list中提取权限函数名
            if (type(pm1) == list):
                permission_list.extend(pm1)
            else:
                permission_list.append(pm1)  # 提取权限函数
            if (dict1[a2] != 0):
                dict2 = dict1[a2]
                for key2 in dict2.keys():  # 第二层权限  
                    a3 = key2
                    pm1 = locals()['list_0_{}_{}'.format(a1, a2)][int(a3) - 1]
                    if (type(pm1) == list):
                        permission_list.extend(pm1)
                    else:
                        permission_list.append(pm1)
                    if (dict2[a3] != 0):
                        dict3 = dict2[a3]
                        for key3 in dict3.keys():  # 第三层权限  
                            a4 = key3
                            pm1 = locals()['list_0_{}_{}_{}'.format(a1, a2, a3)][int(a4) - 1]
                            if (type(pm1) == list):
                                permission_list.extend(pm1)
                            else:
                                permission_list.append(pm1)
                            if (dict3[a4] != 0):
                                dict4 = dict3[a4]
                                for key4 in dict4.keys():  # 第四层权限
                                    a5 = key4
                                    pm1 = locals()['list_0_{}_{}_{}_{}'.format(a1, a2, a3, a4)][int(a5) - 1]
                                    if (type(pm1) == list):
                                        permission_list.extend(pm1)
                                    else:
                                        permission_list.append(pm1)
                                    if (dict4[a5] != 0):
                                        dict5 = dict4[a5]
                                        for key5 in dict5.keys():  # 第五层权限
                                            a6 = key5
                                            pm1 = locals()['list_0_{}_{}_{}_{}_{}'.format(a1, a2, a3, a4, a5)][int(a6) - 1]
                                            if (type(pm1) == list):
                                                permission_list.extend(pm1)
                                            else:
                                                permission_list.append(pm1)



permission_list = list(set(permission_list))  # 去重
permission_list = list(filter(None, permission_list))  # 去空
true_list = ['true'] * len(permission_list)
dictionary = dict(zip(permission_list, true_list))

代码

import re
import pymysql


'''
num = {
    '1': {
        '1': {
            '1': 0,
            '2': {
                '1': 0,
                '2': 0
                        }
                },
        '2':0,
        '3':{
            '1': 0
                }
            },
    
    '2': {
        '1': {
            '1': {
                '1': 0,
                '2': 0
                            },
                },
        '2':{
            '1': 0,
            '2': 0
                },
        '3':0
            }
}


num = {
    '运营': {
        '数据库': {
            '运营数据库': 0,
            '产品数据库': {
                '产品查询': 0,
                '下单价格': 0
                        }
                },
        '数据分析':0,
        '订单管理':{
            '订单文件': 0
                }
            },
    
    '人事': {
        '数据库': {
            '人事数据库': {
                '员工信息': 0,
                '人事结构': 0
                            },
                },
        '数据分析':{
            '打卡出勤': 0,
            '绩效': 0
                },
        '订单管理':0
            }
}


'''


user = 'user1'

conn = pymysql.Connect(
    host='localhost',  # mysql服务器地址
    port=3306,  # mysql服务器端口号
    user='root',  # 用户名
    passwd='123456',  # 密码
    db='test',  # 数据库名
    charset='utf8'  # 连接编码
)
cursor = conn.cursor()





sql = "select user_name,code from user_permission where user_name='{}'"
sql = sql.format(user)
cursor.execute(sql)
number = cursor.fetchall()  # 取出来是元组

code = number[0][1]
if (code == None):
    dict0 = {}
else:
    dict0 = eval(code)


permission_list = []

# list_0 = ['运营', '人事']
list_0 = ['', '']


# list_0_1 = ['数据库', '数据分析', '订单管理']
list_0_1 = ['database', 'analysis', 'order']

# list_0_1_1 = ['运营数据库', '产品数据库']
list_0_1_1 = ['operational_database', 'product_database']

# list_0_1_1_2 = ['产品查询', '下单价格']
list_0_1_1_2 = ['search', 'price']

list_0_1_3 = ['订单文件']
list_0_1_3 = ['file']


# list_0_2 = ['数据库', '数据分析', '订单管理']
list_0_2 = ['database', 'analysis', 'order']

list_0_2_1 = ['人事数据库']
list_0_2_1 = ['hr_database']
# list_0_2_1_1 = ['员工信息', '人事结构']
list_0_2_1_1 = ['staff', 'personnel']


nist_0_2_2 = ['打卡出勤', '绩效']
list_0_2_2 = ['card', 'achievements']





for key0 in dict0.keys():  # 组织   ('运营', '人事')
    a1 = key0
    pm1 = locals()['list_0'.format(a1)][int(a1) - 1]
    permission_list.append(pm1)
    if (dict0[a1] != 0):
        dict1 = dict0[a1]
        for key1 in dict1.keys():  # 第一层权限   ('数据库', '数据分析', '订单管理')
            a2 = key1
            pm1 = locals()['list_0_{}'.format(a1)][int(a2) - 1]  # 从对应list中提取权限函数名
            if (type(pm1) == list):
                permission_list.extend(pm1)
            else:
                permission_list.append(pm1)  # 提取权限函数
            if (dict1[a2] != 0):
                dict2 = dict1[a2]
                for key2 in dict2.keys():  # 第二层权限  
                    a3 = key2
                    pm1 = locals()['list_0_{}_{}'.format(a1, a2)][int(a3) - 1]
                    if (type(pm1) == list):
                        permission_list.extend(pm1)
                    else:
                        permission_list.append(pm1)
                    if (dict2[a3] != 0):
                        dict3 = dict2[a3]
                        for key3 in dict3.keys():  # 第三层权限  
                            a4 = key3
                            pm1 = locals()['list_0_{}_{}_{}'.format(a1, a2, a3)][int(a4) - 1]
                            if (type(pm1) == list):
                                permission_list.extend(pm1)
                            else:
                                permission_list.append(pm1)
                            if (dict3[a4] != 0):
                                dict4 = dict3[a4]
                                for key4 in dict4.keys():  # 第四层权限
                                    a5 = key4
                                    pm1 = locals()['list_0_{}_{}_{}_{}'.format(a1, a2, a3, a4)][int(a5) - 1]
                                    if (type(pm1) == list):
                                        permission_list.extend(pm1)
                                    else:
                                        permission_list.append(pm1)
                                    if (dict4[a5] != 0):
                                        dict5 = dict4[a5]
                                        for key5 in dict5.keys():  # 第五层权限
                                            a6 = key5
                                            pm1 = locals()['list_0_{}_{}_{}_{}_{}'.format(a1, a2, a3, a4, a5)][int(a6) - 1]
                                            if (type(pm1) == list):
                                                permission_list.extend(pm1)
                                            else:
                                                permission_list.append(pm1)



permission_list = list(set(permission_list))  # 去重
permission_list = list(filter(None, permission_list))  # 去空
true_list = ['true'] * len(permission_list)
dictionary = dict(zip(permission_list, true_list))


conn.commit()
cursor.close()
conn.close()

结果

这里通过数据库user_permissiom存放员工的用户名与权限编码,以用户user1和user2为例,执行脚本,得到以下结果。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-07-15 16:07:41  更:2021-07-15 16:09:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/4 1:11:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码