DCS/ruiyiweiUX/Assets/Scripts/Services/AuthenticationService.cs

375 lines
12 KiB
C#
Raw Normal View History

2026-06-09 13:59:11 +08:00
// using System;
// using System.Collections.Generic;
// using System.IO;
// using UnityEngine;
// /// <summary>
// /// 认证服务实现类 - 支持跨平台持久化存储
// /// 使用 persistentDataPath 确保在 Android 系统上正常读写
// /// </summary>
// 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<UserLogService>();
// 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;
// }
// /// <summary>
// /// 添加新用户
// /// </summary>
// 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;
// }
// /// <summary>
// /// 删除用户
// /// </summary>
// 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;
// }
// /// <summary>
// /// 修改用户密码 - 支持管理员重置和用户自改密码
// /// </summary>
// 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;
// }
// /// <summary>
// /// 获取所有用户信息(不包含密码)
// /// </summary>
// public List<UserInfo> GetAllUsers()
// {
// var result = new List<UserInfo>();
// 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;
// }
// /// <summary>
// /// 加载用户数据库
// /// </summary>
// private void LoadUserDatabase()
// {
// try
// {
// if (File.Exists(_dataFilePath))
// {
// string json = File.ReadAllText(_dataFilePath);
// _userDatabase = JsonUtility.FromJson<UserDatabase>(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();
// }
// }
// /// <summary>
// /// 保存用户数据库
// /// </summary>
// 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}");
// }
// }
// /// <summary>
// /// 创建默认用户数据库
// /// </summary>
// private void CreateDefaultUserDatabase()
// {
// _userDatabase = new UserDatabase
// {
// Version = "1.0",
// Users = new List<UserInfo>
// {
// 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("创建默认用户数据库");
// }
// /// <summary>
// /// 获取数据文件路径(用于调试)
// /// </summary>
// public string GetDataFilePath()
// {
// return _dataFilePath;
// }
// }