通过mysql和python相关知识实现简单权限管理系统。主要功能有添加、删除用户、添加删除权限以及分配权限等。实现过程中主要运用了mysql创建表、sql语句、外键、navicat使用、python模块pymysql操作mysql、python动态导入模块等相关知识。
一、数据库表设计
1、表的相关描述
表的具体信息描述
一共设计了4张表
用户信息表(user_type):存储用户名、密码信息,user_type_id为外键和角色表相关联‘,用来标识用户的角色
角色信息表(user_type):用来定义角色,如:普通用户,超级用户等
权限信息表(permission):用来定义权限信息,func是指实现该权限的方法,module是指该方法对应模块的路径,在python中可以动态导入该模块调用相关方法
权限和角色对应关系表(user_type_to_permission):user_type_id为外键是角色id和角色信息表关系,permission_id为外键是权限id和权限信息表关联
二、创建表
1、按照如下顺序创建表
角色表
CREATE TABLE user_type ( nid INT NOT NULL auto_increment PRIMARY KEY, NAME VARCHAR (30) ) ENGINE = INNODB DEFAULT CHARSET = utf8;
用户信息表
CREATE TABLE user_info ( nid INT NOT NULL auto_increment PRIMARY KEY, username VARCHAR (30), passwd VARCHAR (30), user_type_id INT, FOREIGN KEY (user_type_id) REFERENCES user_type (nid) ) ENGINE = INNODB DEFAULT CHARSET = utf8;
权限信息表
CREATE TABLE permission ( nid INT NOT NULL auto_increment PRIMARY KEY, caption VARCHAR (30), module VARCHAR (30), func VARCHAR (30) ) ENGINE = INNODB DEFAULT CHARSET = utf8;
权限和角色对应关系表
CREATE TABLE user_type_to_permission (
nid INT NOT NULL auto_increment PRIMARY KEY,
user_type_id INT,
permission_id INT,
FOREIGN KEY (user_type_id) REFERENCES user_type (nid),
FOREIGN KEY (permission_id) REFERENCES permission (nid)
) ENGINE = INNODB DEFAULT CHARSET = utf8;
2、插入模拟数据
insert into user_type (name) values ('超级管理员'),('普通管理员'); insert into permission (caption,module,func) values ('添加用户','src.auth.user','add_user'),('删除用户','src.auth.user','del_user'); insert into user_info (username,passwd,user_type_id) values ('root','123',1),('yqh','123','2'); insert user_type_to_permission (user_type_id,permission_id) values (1,1),(1,2),(2,1);
三、程序实现
编写代码时主要遵从以下规则:1、为操作每一张表的sql专门写一个类 2、需要做连接查询时sql语句放在from后面那张表对应的类中 3、操作sql的代码和业务的代码分开在不同目录
1、程序目录说明
├── bin │ └── main.py #程序入口 ├── config │ └── settings.py #配置文件,数据库的一些配置信息 └── src #src目录主要放一些和业务相关的方法 ├── auth │ ├── task.py #创建/删除任务 │ ├── type_permission.py #查看用户权限、为某个角色分配权限 │ ├── user.py #添加/删除用户 │ └── user_type.py #添加/删除角色 ├── repository #repository目录主要放操作数据库的方法 定义不同的类 │ ├── permission.py #操作权限表的类 │ ├── user_info.py #操作用户信息的表的类 │ ├── user_type.py #操作角色表的类 │ └── user_type_to_permission.py #操作权限和角色对应关系的类 ├── service.py #主程序 ├── test.py └── utils #utils 目录主要放一些公共模块 ├── commons.py ├── db_connection.py #连接和关闭数据库
2、程序代码
2、1 main.py
#!/usr/bin/env python # -*- coding:utf-8 -*- import os import sys BASEDIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(BASEDIR) from src import service if __name__ == '__main__': service.execute()
2、2 settings.py
#!/usr/bin/env python # -*- coding:utf-8 -*- # 当前登录用户的权限列表 # ... current_user_permission_list = [] # 当前登录用户的基本信息: # {'nid':1,'username': 'root', 'role_id': 1} current_user_info = {} PY_MYSQL_CONN_DICT = { "host