// using System; // using System.Collections.Generic; // using System.IO; // using UnityEngine; // /// // /// 认证服务实现类 - 支持跨平台持久化存储 // /// 使用 persistentDataPath 确保在 Android 系统上正常读写 // /// // public class AuthenticationService : IAuthenticationService // { // private readonly string _dataFilePath; // private UserDatabase _userDatabase; // private const string DATA_FILE_NAME = "users.json"; // public bool IsLoggedIn { get; private set; } // public string CurrentUsername { get; private set; } // public UserRole CurrentRole { get; private set; } // public CurrentUser CurrentUser { get; private set; } // private UserLogService _userLogService; // public AuthenticationService() // { // // 使用 persistentDataPath 而不是 streamingAssetsPath // // persistentDataPath 在所有平台上都是可读写的,包括 Android // _dataFilePath = Path.Combine(Application.persistentDataPath, DATA_FILE_NAME); // // 初始化日志服务 // _userLogService = ServiceLocator.Get(); // if (_userLogService == null) // { // _userLogService = new UserLogService(); // ServiceLocator.Register(_userLogService); // } // LoadUserDatabase(); // } // public bool Login(string username, string password, out UserRole role) // { // role = UserRole.User; // if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password)) // { // return false; // } // var user = _userDatabase.FindUser(username); // if (user != null && user.Password == password) // { // IsLoggedIn = true; // CurrentUsername = username; // CurrentRole = user.Role; // CurrentUser = new CurrentUser { Username = username, Role = user.Role }; // role = user.Role; // // 更新最后登录时间 // user.LastLoginTime = DateTime.Now; // SaveUserDatabase(); // // 记录登录日志 // _userLogService?.LogUserOperation(username, "用户登录", $"角色: {user.Role}", true); // Debug.Log($"用户 {username} 登录成功,角色: {user.Role}"); // return true; // } // // 记录登录失败日志 // _userLogService?.LogUserOperation(username, "用户登录", "密码错误或用户不存在", false); // IsLoggedIn = false; // CurrentUsername = null; // CurrentRole = UserRole.User; // CurrentUser = null; // return false; // } // public bool ValidCurrentPassword(string password) // { // if (CurrentUser != null && CurrentUser.Username != null) // { // var user = _userDatabase.FindUser(CurrentUser.Username); // if (user != null && user.Password == password) // { // Debug.Log("当前密码验证成功"); // return true; // } // } // Debug.LogError("当前密码验证失败"); // return false; // } // public void Logout() // { // string logoutUser = CurrentUsername; // // 记录登出日志 // if (!string.IsNullOrEmpty(logoutUser)) // { // _userLogService?.LogUserOperation(logoutUser, "用户登出", "正常登出", true); // } // Debug.Log($"用户 {logoutUser} 登出"); // IsLoggedIn = false; // CurrentUsername = null; // CurrentRole = UserRole.User; // CurrentUser = null; // } // /// // /// 添加新用户 // /// // public bool AddUser(string username, string password, UserRole role) // { // if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password)) // { // Debug.LogError("用户名和密码不能为空"); // return false; // } // if (_userDatabase.FindUser(username) != null) // { // Debug.LogError($"用户 {username} 已存在"); // return false; // } // var newUser = new UserInfo // { // Username = username, // Password = password, // Role = role, // CreatedTime = DateTime.Now, // IsActive = true // }; // _userDatabase.Users.Add(newUser); // SaveUserDatabase(); // // 记录添加用户日志 // _userLogService?.LogUserOperation(CurrentUsername ?? "system", "添加用户", // $"新用户: {username}, 角色: {role}", true); // Debug.Log($"成功添加用户 {username},角色: {role}"); // return true; // } // /// // /// 删除用户 // /// // public bool RemoveUser(string username) // { // if (string.IsNullOrEmpty(username)) // { // return false; // } // // 不能删除admin用户 // if (username.Equals("admin", StringComparison.OrdinalIgnoreCase)) // { // Debug.LogError("不能删除管理员账户"); // return false; // } // var user = _userDatabase.FindUser(username); // if (user != null) // { // _userDatabase.Users.Remove(user); // SaveUserDatabase(); // // 记录删除用户日志 // _userLogService?.LogUserOperation(CurrentUsername ?? "system", "删除用户", // $"被删除用户: {username}", true); // Debug.Log($"成功删除用户 {username}"); // return true; // } // Debug.LogError($"用户 {username} 不存在"); // return false; // } // /// // /// 修改用户密码 - 支持管理员重置和用户自改密码 // /// // public bool ChangePassword(string username, string oldPassword, string newPassword) // { // if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(newPassword)) // { // Debug.LogError("用户名和新密码不能为空"); // return false; // } // var user = _userDatabase.FindUser(username); // if (user == null) // { // Debug.LogError($"用户 {username} 不存在"); // return false; // } // // 检查操作权限 // bool isAdmin = CurrentRole == UserRole.Admin; // bool isSelfChange = username.Equals(CurrentUsername, StringComparison.OrdinalIgnoreCase); // // 如果是管理员操作且不是修改自己的密码,可以跳过旧密码验证 // if (isAdmin && !isSelfChange) // { // user.Password = newPassword; // user.PasswordChangedTime = DateTime.Now; // SaveUserDatabase(); // // 记录管理员重置密码日志 // _userLogService?.LogUserOperation(CurrentUsername, "重置密码", // $"重置用户 {username} 的密码", true); // Debug.Log($"管理员重置用户 {username} 密码成功"); // return true; // } // // 其他情况需要验证旧密码 // if (string.IsNullOrEmpty(oldPassword)) // { // Debug.LogError("修改密码需要提供旧密码"); // return false; // } // if (user.Password != oldPassword) // { // Debug.LogError("旧密码错误"); // return false; // } // user.Password = newPassword; // user.PasswordChangedTime = DateTime.Now; // SaveUserDatabase(); // // 记录修改密码日志 // _userLogService?.LogUserOperation(username, "修改密码", // isSelfChange ? "用户自己修改" : "管理员代为修改", true); // Debug.Log($"用户 {username} 密码修改成功"); // return true; // } // /// // /// 获取所有用户信息(不包含密码) // /// // public List GetAllUsers() // { // var result = new List(); // foreach (var user in _userDatabase.Users) // { // result.Add(new UserInfo // { // Username = user.Username, // Role = user.Role, // CreatedTime = user.CreatedTime, // LastLoginTime = user.LastLoginTime, // IsActive = user.IsActive // // 不返回密码信息 // }); // } // return result; // } // /// // /// 加载用户数据库 // /// // private void LoadUserDatabase() // { // try // { // if (File.Exists(_dataFilePath)) // { // string json = File.ReadAllText(_dataFilePath); // _userDatabase = JsonUtility.FromJson(json); // if (_userDatabase == null || _userDatabase.Users == null) // { // Debug.LogWarning("用户数据库格式错误,创建新的数据库"); // CreateDefaultUserDatabase(); // } // else // { // Debug.Log($"成功加载用户数据库,共 {_userDatabase.Users.Count} 个用户"); // } // } // else // { // // 创建默认用户数据库 // CreateDefaultUserDatabase(); // } // } // catch (Exception ex) // { // Debug.LogError($"加载用户数据库失败: {ex.Message}"); // CreateDefaultUserDatabase(); // } // // 确保数据库不为空 // if (_userDatabase == null) // { // CreateDefaultUserDatabase(); // } // } // /// // /// 保存用户数据库 // /// // private void SaveUserDatabase() // { // try // { // // 确保目录存在(persistentDataPath 通常已存在) // string directory = Path.GetDirectoryName(_dataFilePath); // if (!Directory.Exists(directory)) // { // Directory.CreateDirectory(directory); // } // string json = JsonUtility.ToJson(_userDatabase, true); // File.WriteAllText(_dataFilePath, json); // Debug.Log($"用户数据库保存成功: {_dataFilePath}"); // } // catch (Exception ex) // { // Debug.LogError($"保存用户数据库失败: {ex.Message}"); // } // } // /// // /// 创建默认用户数据库 // /// // private void CreateDefaultUserDatabase() // { // _userDatabase = new UserDatabase // { // Version = "1.0", // Users = new List // { // new UserInfo // { // Username = "admin", // Password = "admin", // Role = UserRole.Admin, // CreatedTime = DateTime.Now, // IsActive = true // }, // new UserInfo // { // Username = "user", // Password = "123456", // Role = UserRole.User, // CreatedTime = DateTime.Now, // IsActive = true // } // } // }; // SaveUserDatabase(); // Debug.Log("创建默认用户数据库"); // } // /// // /// 获取数据文件路径(用于调试) // /// // public string GetDataFilePath() // { // return _dataFilePath; // } // }