89 lines
2.3 KiB
Python
89 lines
2.3 KiB
Python
|
|
#!/usr/bin/env python3
|
|||
|
|
# -*- coding: utf-8 -*-
|
|||
|
|
|
|||
|
|
"""
|
|||
|
|
用户会话管理模块
|
|||
|
|
用于存储和管理当前登录用户的信息
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
|
|||
|
|
class UserSession:
|
|||
|
|
"""单例模式的用户会话管理器"""
|
|||
|
|
|
|||
|
|
_instance = None
|
|||
|
|
_user_info = None
|
|||
|
|
|
|||
|
|
def __new__(cls):
|
|||
|
|
if cls._instance is None:
|
|||
|
|
cls._instance = super(UserSession, cls).__new__(cls)
|
|||
|
|
return cls._instance
|
|||
|
|
|
|||
|
|
@classmethod
|
|||
|
|
def set_user_info(cls, user_info):
|
|||
|
|
"""
|
|||
|
|
设置当前登录用户信息
|
|||
|
|
|
|||
|
|
Args:
|
|||
|
|
user_info (dict): 用户信息,包含 username, userid, role, auth 等字段
|
|||
|
|
"""
|
|||
|
|
cls._user_info = user_info
|
|||
|
|
print(f"[UserSession] 用户登录成功: {user_info.get('username')} (角色: {user_info.get('role')})")
|
|||
|
|
|
|||
|
|
@classmethod
|
|||
|
|
def get_user_info(cls):
|
|||
|
|
"""
|
|||
|
|
获取当前登录用户信息
|
|||
|
|
|
|||
|
|
Returns:
|
|||
|
|
dict: 用户信息,如果未登录则返回 None
|
|||
|
|
"""
|
|||
|
|
return cls._user_info
|
|||
|
|
|
|||
|
|
@classmethod
|
|||
|
|
def get_username(cls):
|
|||
|
|
"""获取当前用户名"""
|
|||
|
|
return cls._user_info.get('username') if cls._user_info else None
|
|||
|
|
|
|||
|
|
@classmethod
|
|||
|
|
def get_userid(cls):
|
|||
|
|
"""获取当前用户ID"""
|
|||
|
|
return cls._user_info.get('userid') if cls._user_info else None
|
|||
|
|
|
|||
|
|
@classmethod
|
|||
|
|
def get_role(cls):
|
|||
|
|
"""获取当前用户角色"""
|
|||
|
|
return cls._user_info.get('role') if cls._user_info else None
|
|||
|
|
|
|||
|
|
@classmethod
|
|||
|
|
def get_auth(cls):
|
|||
|
|
"""获取当前用户权限"""
|
|||
|
|
return cls._user_info.get('auth') if cls._user_info else None
|
|||
|
|
|
|||
|
|
@classmethod
|
|||
|
|
def is_logged_in(cls):
|
|||
|
|
"""检查是否已登录"""
|
|||
|
|
return cls._user_info is not None
|
|||
|
|
|
|||
|
|
@classmethod
|
|||
|
|
def is_super(cls):
|
|||
|
|
"""检查是否为超级管理员"""
|
|||
|
|
return cls.get_role() == 'super'
|
|||
|
|
|
|||
|
|
@classmethod
|
|||
|
|
def is_admin(cls):
|
|||
|
|
"""检查是否为管理员"""
|
|||
|
|
role = cls.get_role()
|
|||
|
|
return role in ['super', 'admin']
|
|||
|
|
|
|||
|
|
@classmethod
|
|||
|
|
def is_engineer(cls):
|
|||
|
|
"""检查是否为工程师"""
|
|||
|
|
role = cls.get_role()
|
|||
|
|
return role in ['super', 'admin', 'engineer']
|
|||
|
|
|
|||
|
|
@classmethod
|
|||
|
|
def clear(cls):
|
|||
|
|
"""清除用户会话(登出)"""
|
|||
|
|
cls._user_info = None
|
|||
|
|
print("[UserSession] 用户已登出")
|