1. 程式人生 > >MySQL權限管理小程序

MySQL權限管理小程序

重新開始 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,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

MySQL權限管理小程序