通过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和权限信息表关联
View Code
二、创建表
1、按照如下顺序创建表
角色表
CREATE TABLE user_type (
nid INT NOT NULL auto_increment PRIMARY KEY,
NAME VARCHAR (30)
) ENGINE= INNODB DEFAULT CHARSET = utf8;
View Code
用户信息表
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;
View Code
权限信息表
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;
View Code
权限和角色对应关系表
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;
View Code
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);
View Code
三、程序实现
编写代码时主要遵从以下规则:1、为操作每一张表的sql专门写一个类 2、需要做连接查询时sql语句放在from后面那张表对应的类中 3、操作sql的代码和业务的代码分开在不同目录
1、程序目录说明
├── bin
│ └── main.py#程序入口
├── config
│ └── settings.py#配置文件,数据库的一些配置信息
└── src #src目录主要放一些和业务相关的方法
├── auth
│ ├── task.py#创建/删除任务
│ ├── type_permission.py #查看用户权限、为某个角色分配权