权限管理系统

程序代码

1.main

'''
程序入口
'''
import os,sys

#建立一个目录
basedir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

#把目录追加到我的路径里
sys.path.append(basedir)

#导入我的主程序
from zy3.src import service

if __name__ == '__main__':    #运行我的service主程序
    service.execute()
main

2.setting

"""
配置文件,数据库的一些配置信息

"""
#当前登陆用户的权限列表
user_permission_list = []

#当前登陆用户的基本信息
user_info = {}

#数据库的配置信息
pyMysql_Connect_Dict = {
    "host":'127.0.0.1',
    "port":3306,
    "user":'root',
    "passwd":'自己建',
    "db":'自己建',
    "charset":'utf8'
}
setting

3.type_permission

"""
查看用户权限、为某个角色分配权限

"""
from 自己建.src.repository.permission import Permission
from 自己建.src.repository.user_info import UserInfoRepository
from 自己建.src.repository.user_type import UserTypeRepository
from 自己建.src.repository.user_type_to_permission import UserTypePermission

user= UserInfoRepository()  #操作用户信息的表的类
user_type = UserTypeRepository()   #操作角色表的类
permission = Permission()  #操作权限表的类
type_permission = UserTypePermission()   #操作权限和角色对应关系的类
def look_type():
    look= input("请输入你查看的用户:")
    username =user.fetch_by_user(look)
    if username:
        print("该用户 %s 存在"%username)
        permissions=type_permission.get_permission(username['user_type_id'])
        for i in permissions:
            print(i["caption"])
    else:
        print("没有该用户")

def add_per():
    #从permission表中获取所有权限列表
    types=permission.fetch_all()
    #从user_type表中获取所有角色列表
    pers=user_type.all_caption()
    print("{:>8}目前可以管理的角色信息如下".format(""))
    for i in types:
        print(i["nid"],i["caption"])
    type_id=input("请输入添加权限角色的id")
    # 在打印的时候在前面
    print("{:>8}目前可以管理的角色信息如下".format(""))
    for i in pers:
        print(i["nid"],i["caption"])
    per_id = input("请输入需要分配权限的id:")
    type_permission.add(user_type_id=type_id, permission_id=per_id)
    print("{:>8}权限分配成功".format(''))
View Code

4.user

"""
添加/删除用户

"""
from 自己建.src.repository.user_info import UserInfoRepository
from 自己建.src.repository.user_type import UserTypeRepository
from 自己建.src.utils.MD5 import pwd_md5
from 自己建.src.repository import user_info

'''
实现向user_info表中添加和删除用户
'''



def add_user():
    obj_user = UserInfoRepository()
    obj_type = UserTypeRepository()
    types = obj_type.all_caption()
    while True:
        print('{:>8}请输入以下信息创建用户'.format(''))
        name = input('请输入用户名:')
        password = input('请输入密码:')
        pwd = pwd_md5(password)
        print('{:>8}角色列表如下:'.format(''))
        for i in types:
            print(i['nid'], i['caption'])
        typeid = input('请选择角色id:')
        username = obj_user.exist(name)
        if username:
            print('\033[36;1m该用户已存在\033[0m')
            continue
        else:
            obj_user.add(username=name, passwd=pwd, user_type_id=typeid)
            print('{:>8}成功创建用户'.format(''))
            break

def del_user():
    obj = UserInfoRepository()
    name = input('请输入需要删除的用户名:')
    obj.dele(name)
    print('{:>8}成功删除用户'.format(''))
user

5.user_type

"""
添加/删除角色

"""
from 自己建.src.repository.user_type import UserTypeRepository

type = UserTypeRepository()
def add_type():
    caption = input('请输入你要创建的角色:')
    type.add(caption)
    print('角色创建成功')

def del_type():
    caption = input('请输入你要删除的角色:')
    type.del_data(caption)
    print('删除成功!')
user_type

6.permission

"""
操作权限表的类
导入路连接数据库和关闭数据库的操作

"""
from 自己建.src.utils.db_connection import DbConnect

try:
    class Permission:
        # 初始化对象
        def __init__(self):
            self.db_conn=DbConnect()

        def add(self,**kwargs):
            conn =self.db_conn.connect() #连接数据库
            sql="""insert into permission(%s) VALUES (%s)"""#在mysql表里插入字段名和数据
            key_list=[] #建立一个列表存放key
            value_list=[]#建立一个列表存放value
            for k in kwargs:#for循环遍历kwargs
                key_list.append(k)#把key存放在key_list中
                value_list.append("%%(%s)s"%k)#把value存放在value_list中
            sql=sql%(",".join(key_list),",".join(value_list)) #通过分隔符去分别插入到两创建的行列表中
            conn.execute(sql, kwargs)# 提交数据运行语句
            self.db_conn.close()#关闭连接

        def fetch_all(self):
            conn = self.db_conn.connect() #与数据库建立连接
            sql="""select * from permission""" #在MySQL的pemission中查询所有角色权限信息
            conn.execute(sql) #提交数据运行语句
            result=conn.fetchall() #获取所有角色的权限
            self.db_conn.close() #关闭连接
            return result #返回获取的所有数据
except Exception as e:
    print(e)
permission

7.user_info

from 自己建.src.utils.db_connection import DbConnect


class UserInfoRepository:
    def __init__(self):
        self.db_conn = DbConnect()

    def add(self, **kwargs):
        '''
        新增用户
        :param kwargs:
        :return:
        '''
        cursor = self.db_conn.connect()
        sql = """ insert into user_info(%s) values(%s)"""
        key_list = []
        value_list = []
        for k, v in kwargs.items():
            key_list.append(k)
            value_list.append('%%(%s)s' % k)
        sql = sql % (','.join(key_list), ','.join(value_list))
        cursor.execute(sql, kwargs)
        self.db_conn.close()

    def dele(self, name):
        '''
        根据用户名删除用户
        :param name:
        :return:
        '''
        cursor = self.db_conn.connect()
        sql = "delete from user_info WHERE username=%s"
        cursor.execute(sql, name)
        self.db_conn.close()

    def fetch_by_user_pwd(self, username, password):
        """
        根据用户名密码获取账户信息、角色类型
        :param username:
        :param password:
        :return:
        """
        cursor = self.db_conn.connect()
        sql = """
          select
            user_info.nid as nid,
            user_info.username as username,
            user_info. user_type_id as user_type_id,
            user_type.caption as user_type_caption
          from
            user_info
          left join user_type on user_info.user_type_id=user_type.nid
          where
            user_info.username=%s and user_info.passwd=%s
        """
        cursor.execute(sql, [username, password, ])
        result = cursor.fetchone()
        self.db_conn.close()
        return result

    def fetch_by_user(self, username):
        """
        仅根据用户名获取账户信息、角色类型
        :param username:
        :param password:
        :return:
        """
        cursor = self.db_conn.connect()
        sql = """
          select
            user_info.nid as nid,
            user_info.username as username,
            user_info. user_type_id as user_type_id,
            user_type.caption as user_type_caption
          from
            user_info
          left join user_type on user_info.user_type_id=user_type.nid
          where
            user_info.username=%s
        """
        cursor.execute(sql, username)
        result = cursor.fetchone()
        self.db_conn.close()
        return result

    def exist(self, username):
        global users
        '''
        根据用户名判断用户是否存在
        :param username:
        :return:
        '''
        sql = "select 1 from user_info where username=%s"
        cursor = self.db_conn.connect()
        cursor.execute(sql, [username,])
        result = cursor.fetchone()
        self.db_conn.close()
        return result

    def Change_password(self,password,username):
        sql = """
        UPDATE 
        user_info
        set 
        passwd="%s"
        where 
        username="%s"
        """%(password,username)
        cursor = self.db_conn.connect()
        a=cursor.execute(sql)
        result = cursor.fetchone()
        self.db_conn.close()
        return result
user_info

8.user_type

from 自己建.src.utils.db_connection import DbConnect

try:
    class UserTypeRepository:
        def __init__(self):
            #创建连接,建立游标
            self.db_conn = DbConnect()
        #添加角色
        def add(self,caption):
            #建立连接,游标
            conn = self.db_conn.connect()
            #创建插入表结构
            sql = """insert into user_type (caption) VALUE (%s)"""
            #执行插入操作
            conn.execute(sql, [caption,])
            #关闭连接
            self.db_conn.close()
            #删除角色
        def del_data(self,caption):
            #建立游标和连接
            conn = self.db_conn.connect()
            #删除语句
            sql = """delete from user_type where caption=%s"""
            #执行删除语句
            conn.execute(sql, [caption,])
            #关闭连接
            self.db_conn.close()

        def all_caption(self):
            conn = self.db_conn.connect()
            sql = """select * from user_type """
            conn.execute(sql)
            data = conn.fetchall()
            self.db_conn.close()
            return data
except Exception as e:
    print(e)
user_type

9.user_type_to_permission

from 自己建.src.utils.db_connection import DbConnect

try:
    class UserTypePermission:
        def __init__(self):
            #建立数据库,游标
            self.db_conn = DbConnect()

        def add(self,**kwargs):
            #连接数据库,游标
            cursor = self.db_conn.connect()
            sql = """ insert into user_type_to_permission(%s) values(%s)"""
            #key列表存放插入user_type_id_permission的字节
            key_list = []
            #value列表存放插入user_type_id_permission的字节的值
            value_list = []
            for k in kwargs:
                key_list.append(k)
                value_list.append('%%(%s)s' % k)
            sql = sql % (','.join(key_list), ','.join(value_list))
            cursor.execute(sql, kwargs)
            self.db_conn.close()
        #根据用户角色的id获取所有权限
        def get_permission(self, user_type_id):
            #建立连接,游标
            cursor = self.db_conn.connect()
            #查询权限表的所有数据和外连接权限和角色对应关系表用户角色ID
            sql = """select * from user_type_to_permission
                  left join permission on user_type_to_permission.permission_id = permission.nid
                  where user_type_to_permission.user_type_id = %s
                """
            #执行mysql语句和用户角色Id
            cursor.execute(sql,user_type_id)
            #获取所有的数据
            result = cursor.fetchall()
            #关闭连接
            self.db_conn.close()
            #返回我获取的数据
            return result
except Exception as e:
    print(e)
user_type_to_permission

10.db_connection

'''
 连接和关闭数据库

'''
import pymysql
from 自己建.config import settings

class DbConnect:
    def __init__(self):
        #导入我的数据库配置信息
        self.__conn_dict = settings.pyMysql_Connect_Dict
        self.conn = None
        self.cursor = None

    #建立连接数据库以及当前游标
    def connect(self,cursor=pymysql.cursors.DictCursor):
        self.conn = pymysql.connect(**self.__conn_dict)
        self.cursor = self.conn.cursor(cursor=cursor)
        return self.cursor

    #关闭连接
    def close(self):
        #提交事务
        self.conn.commit()
        #关闭游标
        self.cursor.close()
        #关闭连接
        self.conn.close()
db_connection

11.MD5#加密

import hashlib


def pwd_md5(pwd):
    obj = hashlib.md5()
    obj.update(pwd.encode('utf-8'))
    pwd_MD5 = obj.hexdigest()
    return pwd_MD5
MD5加密

 

12.service

"""
from 自己建.src.auth import user
from 自己建.src.repository.user_info import UserInfoRepository
from 自己建.src.repository.user_type_to_permission import UserTypePermission
from 自己建.src.repository.user_type import UserTypeRepository
from 自己建.config import settings
from 自己建.src.utils.MD5 import pwd_md5
import importlib

user_info = UserInfoRepository()
type = UserTypeRepository()
type_permission = UserTypePermission()

def login():
    while True:
        username =  input('请输入用户名:')
        password = input('请输入密码:')
        pwd = pwd_md5(password)
        userinfo = user_info.fetch_by_user_pwd(username,pwd)
        if not userinfo:
            print('\033[34;1m用户名或密码输入错误,请重新输入!\033[0m')
            continue
        permission_list = type_permission.get_permission(userinfo['user_type_id'])
        settings.user_permission_list = permission_list
        settings.user_info = user_info
        return True

def register():
    user.add_user()

def change_pwd():
    while True:
        user_name = input('你要修改哪个用户的密码:')
        name = user_name
        user_name = user_info.exist(user_name)
        if not user_name:
            print('\033[36;1m没有该用户\033[0m')
            continue
        else:
            password = input('请输入密码:')
            pwd = pwd_md5(password)
            # print(user_name)
            user_info.Change_password(pwd,name)
            print('修改成功')
            break

def all_information():
    while True:
        print('请选择你要进行的权限:')
        for i, item in enumerate(settings.user_permission_list, 1):
            print('\t',i, item['caption'])
        msg = int(input('请输入您选择的权限序号:'))
        permission = settings.user_permission_list[msg-1]
        modules = permission['module']
        func_name = permission['func']
        m = importlib.import_module(modules)
        func = getattr(m,func_name)
        func()

def execute():
    while True:
        print('\033[36;1m欢迎来到权限管理系统:请您选择:1.登陆 2.注册 3.修改密码\033[0m')
        dic={'1':login,'2':register,'3':change_pwd}
        msg = input('登陆请按1,注册请按2,修改密码请按3:')
        if msg not in dic.keys():
            print('\033[34;1m对不起没有该选项,请重新输入您的选择!\033[0m')
            continue
        func = dic[msg]
        say = func()
        if say:
            all_information()
service

 

具体代码没全按照上一篇随笔的结构图来编写

后续会有更新

 

posted @ 2020-12-16 23:56  日月明vx  阅读(266)  评论(0)    收藏  举报