見出し画像

[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                      <=削除されていること確認できる

いいなと思ったら応援しよう!