MySQL權限管理小程序
阿新 • • 發佈:2017-12-23
重新開始 base color enter imp == 錯誤 bin user_list
作業:
參考表結構:
用戶類型
用戶信息
權限
用戶類型&權限
功能:
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,UniqueConstraint4 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
MySQL權限管理小程序