MySQL权限管理小程序

作业:

     参考表结构:

         用户类型

         用户信息

         权限

         用户类型&权限

    功能:          

1. 登陆、注册、找回密码
2. 权限管理
3. 角色管理
4. 角色分配权限
5. 动态显示当前登陆用户权限菜单

注:可基于反射实现将权限和代码结合"

  1 from sqlalchemy import create_engine
  2 from sqlalchemy.ext.declarative import declarative_base
  3 from sqlalchemy import Column,Integer,ForeignKey,CHAR,VARCHAR,UniqueConstraint
  4 from sqlalchemy.orm import sessionmaker
  5 #建立链接
  6 engine = create_engine("mysql+pymysql://root:@127.0.0.1:3306/s作业db?charset=utf8", max_overflow=5)
  7 Base = declarative_base()
  8 Session = sessionmaker(bind=engine)
  9 session = Session()
 10 #创建用户信息表
 11 class User(Base):
 12     __tablename__ = ‘user‘
 13     uid = Column(Integer,primary_key=True,autoincrement=True)
 14     name = Column(CHAR(20),nullable=False)
 15     pwd = Column(CHAR(20),nullable=False)
 16     roll_id = Column(Integer,ForeignKey(‘roll.rid‘))
 17 #__table_args__的参数必须是元组的形式
 18     __table_args__ = (
 19         UniqueConstraint(name,pwd,name=‘uni_np‘),  #用户名和密码不能重复!
 20     )
 21 #创建权限表
 22 class Authority(Base):
 23     __tablename__ =‘authority‘
 24     aid = Column(Integer,primary_key=True,autoincrement=True)
 25     auth = Column(VARCHAR(255),nullable=True)
 26
 27 #创建角色表
 28 class Roll(Base):
 29     __tablename__ =‘roll‘
 30     rid = Column(Integer,primary_key=True,autoincrement=True)
 31     dep = Column(VARCHAR(255),nullable=False)
 32
 33 #角色权限关系表
 34 class Ro_au(Base):
 35     __tablename__ =‘ro_au‘
 36     id = Column(Integer,primary_key=True,autoincrement=True)
 37     rid = Column(Integer,ForeignKey(‘roll.rid‘))
 38     aid = Column(Integer,ForeignKey(‘authority.aid‘))
 39 #创建原始关系表
 40 def original_table():
 41     session.add_all([
 42         Roll(dep=‘项目经理‘),
 43         Roll(dep=‘实验室‘),
 44         Roll(dep=‘办公室‘),
 45         Roll(dep=‘人事部‘),
 46         Roll(dep=‘工程部‘),
 47         Roll(dep=‘普通员工‘),
 48         Authority(auth=‘查看个人信息‘),
 49         Authority(auth=‘更改用户信息‘),
 50         Authority(auth=‘删除用户‘),
 51         Authority(auth=‘设定项目整体方案‘),
 52         Authority(auth=‘查看项目进度‘),
 53         Authority(auth=‘查看项目经费‘),
 54         Authority(auth=‘查看项目计划‘),
 55         Authority(auth=‘项目技术方案‘),
 56         Authority(auth=‘项目支出管理‘),
 57         Authority(auth=‘项目人事安排‘),
 58         Authority(auth=‘项目后勤保障‘),
 59     ])
 60     session.commit()
 61     session.add_all([
 62         User(name=‘李一‘,pwd=‘123‘,roll_id=1),
 63         User(name=‘李二‘,pwd=‘456‘,roll_id=2),
 64         User(name=‘李三‘,pwd=‘789‘,roll_id=2),
 65         User(name=‘李四‘,pwd=‘1234‘,roll_id=3),
 66         User(name=‘李五‘,pwd=‘2345‘,roll_id=4),
 67         User(name=‘李六‘,pwd=‘3456‘,roll_id=5),
 68         User(name=‘李七‘,pwd=‘4567‘,roll_id=6),
 69     ])
 70     session.add_all([
 71         Ro_au(rid=1,aid=1),Ro_au(rid=1,aid=5),Ro_au(rid=1,aid=6),
 72         Ro_au(rid=2, aid=1),Ro_au(rid=2, aid=4),Ro_au(rid=2, aid=8),
 73         Ro_au(rid=3, aid=1),Ro_au(rid=3, aid=5),Ro_au(rid=3, aid=6),Ro_au(rid=3, aid=7),
 74         Ro_au(rid=4, aid=1),Ro_au(rid=4, aid=2),Ro_au(rid=4, aid=3),
 75         Ro_au(rid=5, aid=1),Ro_au(rid=5, aid=9),Ro_au(rid=5, aid=11),
 76         Ro_au(rid=6, aid=1),
 77     ])
 78     session.commit()
 79
 80 #创建数据库所有表
 81 def creat_db():
 82     Base.metadata.create_all(engine)
 83
 84 #删除数据库所用表
 85 def drop_db():
 86     Base.metadata.drop_all(engine)
 87 #显示个人权限
 88 def show_auth(user_name):
 89     user_roll_id = session.query(User.roll_id).filter(User.name == user_name).subquery()
 90     user_dep_list = session.query(Roll.dep).filter(Roll.rid == user_roll_id).all()
 91     for row in user_dep_list:
 92         user_dep = row[0]
 93         print(‘您当前所属部门名称:‘, user_dep)
 94     print(‘\33[33m您具有的权限如下:\33[37m‘)
 95     auth_list = session.query(Authority.auth).join(Ro_au).filter(Ro_au.rid == user_roll_id).all()
 96     count = 1
 97     for auth in auth_list:
 98         print(count, auth[0])
 99         count += 1
100
101 #显示所有部门信息
102 def show_department():
103     print(‘公司现有部门如下:‘)
104     dep_list = session.query(Roll).all()
105     for dep in dep_list:
106         print(dep[0],dep[1])
107
108
109 def login():
110     while True:
111         user_name = input(‘请输入用户名【返回3】:\n>>>‘).strip()
112         if user_name.lower() == ‘3‘:
113             break
114         user_pwd = input(‘请输入用户密码【返回3】:\n>>>‘).strip()
115         if user_pwd.lower() == ‘3‘:
116             break
117         user_list = session.query(User.name,User.pwd).all()
118
119         if (user_name,user_pwd) in user_list:
120             print(‘登陆成功!‘)
121             choice = input(‘》》》1、进入个人权限界面‘
122                            ‘\n》》》2、查看公司具有的所有部门‘
123                            ‘\n》》》3、返回主界面‘
124                            ‘\n>>>‘).strip()
125             if choice == ‘1‘:
126                 show_auth(user_name)
127                 continue
128             if choice == ‘2‘:
129                 show_department()
130                 continue
131             if choice.lower() == ‘3‘:
132                 break
133         else:
134             print(‘用户名或者密码错误!‘)
135             continue
136
137 #用户注册
138 def register():
139     while True:
140         user_name = input(‘请输入用户名【返回B】:\n>>>‘).strip()
141         if not user_name:continue
142         if user_name.lower() == ‘3‘:
143             break
144         name_list = session.query(User.name).all()
145         if (user_name,) in name_list:
146             print(‘该用户名已经存在!‘)
147             break
148         else:
149             user_pwd = input(‘请输入用户密码:\n>>>‘).strip()
150             if not user_pwd:continue
151             dep_list = session.query(Roll.rid,Roll.dep).all()
152             for row in dep_list:
153                 print(row.rid,row.dep)
154             user_roll = input(‘请输入所属部门序号:\n>>>‘).strip()
155             if not user_roll:
156                 print(‘部门序号不能为空,请重新开始!‘)
157                 continue
158             if user_roll.isdigit():
159                 session.add(User(name=user_name,pwd=user_pwd,roll_id=int(user_roll))) #写入数据库
160                 session.commit()
161                 print(‘新的员工信息已经注册成功!‘)
162                 break
163             else:
164                 print(‘您选择的部门有误,请重新选择!‘)
165
166 #找回密码
167 def find_pwd():
168     while True:
169         user_name =input(‘请输入用户名【返回B】:‘).strip()
170         if not user_name:continue
171         if user_name.lower() == ‘3‘:
172             break
173         name_list =session.query(User.name).all()
174         if (user_name,) in name_list:
175             pwd_list =session.query(User.pwd).filter(User.name==user_name).all()
176             print(‘您的密码为:‘)
177             for pwd in pwd_list:
178                 print(pwd[0])
179         else:
180             print(‘您输入的用户名不存在!‘)
181
182 if __name__ == ‘__main__‘:
183     while True:
184         creat_tab_choice = input(‘是否要在数据库中创建原始关系表?第一次请选择是!‘
185                                  ‘**此操作会删除已添加的数据!**【是Y否N】:\n>>>‘).strip()
186         if creat_tab_choice.lower() == ‘y‘:
187             drop_db()
188             creat_db()
189             original_table()
190             print(‘基本权限管理原始表已创建!‘)
191         elif creat_tab_choice.lower() == ‘n‘:
192             pass
193         else:
194             print(‘您的操作有误,请重新选择!‘)
195             continue
196         while True:
197             print(‘欢迎进入权限管理系统!‘.center(21, ‘*‘))
198             choice = input(‘登录D\t注册Z\t找回密码M\t退出Q:\n>>>‘).strip()
199             if choice.lower() == ‘q‘:
200                 print(‘成功退出权限管理系统,欢迎您再次使用!‘)
201                 break
202             elif choice.lower() == ‘d‘:
203                 login()
204             elif choice.lower() == ‘z‘:
205                 register()
206             elif choice.lower() == ‘m‘:
207                 find_pwd()
208             else:
209                 print(‘您输入的指令有误,请重新选择!‘)
210                 continue
211         break
时间: 2024-11-09 00:55:32

MySQL权限管理小程序的相关文章

更新 | 移动端BUG管理小程序功能更新!

目前,移动端BUG管理小程序已经上线并且保持持续更新,欢迎大家使用!扫描小程序码就可以随时随地进行BUG管理了哦!一.注册/登录如果您是第一次使用MadPecker,可以直接在小程序里完成注册.小程序登录时用的邮箱地址和密码和PC端的一致,而且登录一次之后,下次进入小程序直接进入项目界面,免去了重复登录的烦恼.二.处理BUGMadPecker小程序和PC端数据完全互通,在小程序上可以完成指派.完成.通过.不通过.关闭.再打开等操作.三.统计项目管理者可以在小程序上随时查看项目进度.项目成员工作进

搞定linux上MySQL编程(四):mysql权限管理

[版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途] mysql中提供了比较完整的安全/权限管理系统,下面简单介绍权限的原理和使用. mysql数据库安装完成启动之后,能看当前数据库列表可以看到一个mysql的数据库: mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | |

mysql权限管理总结

use mysql; 将dbname数据库的查询权限赋予[email protected]用户,应保持完整的用户信息,包含允许登录的IP,否则会新增任意主机的用户grant select on dbname.*  to [email protected]; 回收权限revoke select on dbname.*  from [email protected]; 多个权限以逗号间隔 如果想立即刷新权限请使用更新操作flush privileges; mysql数据库里user表管理用户的数据,

Mysql——权限管理

安装Mysql时会自动安装一个名为mysql的数据库.这个数据库下面存储的是权限表.Mysql会根据这些权限表的内容为每个用户赋予相应的权限所以我们也是通过这些表来实现管理用户和权限的 use mysql; show tables; +---------------------------+ | Tables_in_mysql | +---------------------------+ | columns_priv | | db | | event | | func | | general_

MySQL——权限管理和备份

1.用户管理 1.1.SQL yog 可视化管理 删除用户 添加新用户 1.2.SQL 命令操作 用户表: mysql.user 本质:读这张表进行增删改查 创建用户: 修改密码 重命名 用户授权 查询权限 ROOT用户权限 撤销权限 删除用户 -- 创建用户 CREATE USER 用户名 IDENTIFIED BY '密码' CREATE USER jiang IDENTIFIED BY '123456' -- 修改密码 (修改当前用户密码) SET PASSWORD = PASSWORD(

Mysql数据库一个小程序实现自动创建分表。

每当跨月的时候也是系统出问题最多的时候,没有表和字段缺失是两个最常见的错误. 为了解决这个问题,研究了一下mysql的 information_schema 表: information_schema这张数据表保存了MySQL服务器所有数据库的信息.如数据库名,数据库的表,表栏的数据类型与访问权限等. 再简单点,这台MySQL服务器上,到底有哪些数据库.各个数据库有哪些表,每张表的字段类型是什么,各个数据库要什么权限才能访问,等等信息都保存在information_schema表里面. OK!事

mysql权限管理,用户管理

1 创建用户 mysql> CREAT USER  'paris'@'localhost' IDENTIFIED BY  'password'; 此命令创建一个未授权的用户 2 删除用户 mysql> DROP USER 'username'@'domain'; 3 GRANT和REVOKE语句允许系统管理员创建MySQL用户账户,授予权限和撤销权限. 以上参考MySQL5.5手册13.5.1 4 也可以直接授权同时创建用户 mysql > GRANT ALL PRIVILEGES ON

mysql权限管理命令

新建用户,并授予所有权限: grant all privileges on *.* to 'username'@'localhost' identified by 'password' with grant option; 进入mysql数据库,查询user表和db表可见权限设置 user mysql; select * from user where user='username' and host='localhost' \G; select * from db \G;

mysql——权限管理——授权、收回权限、查看授权

前期准备,新建一个用户: create user 'sww'@'localhost' identified by '123456'; /*创建一个用户*/ select * from user; mysql -h localhost -P 3306 -u sww -p123456 /*DOS窗口中登录查看*/ ======================================================================================== 使用gra