[Python]<続>ターミナルログイン機能に管理者機能を加えてみる
1.管理者機能
前回作成したターミナルでログイン機能に管理者機能を追加したいと思います。機能はユーザー登録者数とユーザーidを一覧取得するものとユーザーidを指定して削除するものの2つです。通常のログイン画面から管理者のみに発行されるidとパスワードでこの機能を実行してみます。
2.コード
from hashlib import sha256
from getpass import getpass
class UserCertification:
def __init__(self):
self.user_list = []
self.user_info = {"user_id": "", "pass": ""}
#メッセージダイジェスト生成
def create_message_digest(self, user_id, password):
cat_info = user_id + password
cat_info_to_byte = cat_info.encode()
hash_obj = sha256()
hash_obj.update(cat_info_to_byte)
msg_digest = hash_obj.hexdigest()
return msg_digest
#ユーザー存在確認
def check_exists_user(self, input_user_id):
for user in self.user_list:
user_id = user["user_id"]
password = user["pass"]
if user_id == input_user_id:
return True
else:
return False
#ユーザー新規作成
def create_user(self, user_id, password):
password = self.create_message_digest(user_id, password)
if self.check_exists_user(user_id):
print("既にユーザーidが登録されています")
else:
user_data = self.user_info.copy()
user_data["user_id"] = user_id
user_data["pass"] = password
self.user_list.append(user_data)
#ログインチェック
def login(self, input_user_id, input_password):
check_password = self.create_message_digest(input_user_id, input_password)
check_user_id = input_user_id
for user in self.user_list:
user_id = user["user_id"]
password = user["pass"]
if check_user_id == user_id and check_password == password:
print("Success!")
return True
elif input_user_id == "admin" and input_password == "admin":
self.admin()
#管理者
def admin(self):
select_mode = int(input("1:ユーザ-取得/2:ユーザー_削除:"))
if select_mode == 1:
print("ユーザー数:{0}".format(len(self.user_list)))
self.admin_show()
elif select_mode == 2:
self.admin_del_user()
#管理者_ユーザ一_覧取得
def admin_show(self):
for i, user in enumerate(self.user_list):
user_id = user["user_id"]
print(i + 1, user_id)
#管理者ユーザー削除
def admin_del_user(self):
del_user_id = input("削除したいユーザーidを入力してください")
try:
for i, user in enumerate(self.user_list):
if del_user_id in user["user_id"]:
del self.user_list[i]
print("ユーザーidを削除しました")
except KeyError as ke:
print(ke, ":お探しのユーザーidは見つかりませんでした")
def input_info():
user_id = input("ユーザーidを入力してください:")
password = getpass("パスワードを入力してください:")
return user_id, password
if __name__ == "__main__":
uc = UserCertification()
while True:
select_mode = int(input("0:新規登録/1:ログイン/2:終了"))
if select_mode == 0:
user_id, password = input_info()
uc.create_user(user_id, password)
elif select_mode == 1:
user_id, password = input_info()
uc.login(user_id, password)
elif select_mode == 2:
break
3.実行結果
0:新規登録/1:ログイン/2:終了0
ユーザーidを入力してください:nobi <=新規作成
パスワードを入力してください:
0:新規登録/1:ログイン/2:終了0
ユーザーidを入力してください:dora <=新規作成
パスワードを入力してください:
0:新規登録/1:ログイン/2:終了1
ユーザーidを入力してください:nobi
パスワードを入力してください:
Success!
0:新規登録/1:ログイン/2:終了1
ユーザーidを入力してください:admin <=管理者アカウントでログイン
パスワードを入力してください:
1:ユーザ-取得/2:ユーザー_削除:1 <=ユーザー情報取得
ユーザー数:2
1 nobi
2 dora
1:ユーザ-取得/2:ユーザー_削除:2 <=ユーザーidを指定して削除
削除したいユーザーidを入力してくださいdora
ユーザーidを削除しました
0:新規登録/1:ログイン/2:終了1
ユーザーidを入力してください:admin
パスワードを入力してください:
1:ユーザ-取得/2:ユーザー_削除:1
ユーザー数:1
1 nobi <=削除されていること確認できる