using Abp; using Abp.Auditing; using Abp.Authorization; using Abp.Configuration; using Abp.Domain.Repositories; using Abp.Runtime.Caching; using Abp.Runtime.Session; using Abp.UI; using VberZero.AppService.Base; using VberZero.AppService.Settings.Dto; using VberZero.Auditing; using VberZero.Authorization.Users; using VberZero.BaseSystem; using VberZero.BaseSystem.Users; using VberZero.Session; // ReSharper disable All namespace VberZero.AppService.Settings; [AbpAuthorize, AuditLog("配置管理", "配置")] public class SettingAppServiceBase : VzAppServiceBase, ISettingAppServiceBase { private IRepository _repository; private VzUserManager _userManager; public SettingAppServiceBase(ICacheManager cacheManager, IRepository repository, ISettingManager settingManager, VzUserManager userManager) { CacheManager = cacheManager; _repository = repository; _userManager = userManager; SettingManager = settingManager; } /// /// 更改全局配置 /// /// /// /// [AuditLog("修改配置")] public async Task ChangeGlobalSetting(ChangeSettingDto input) { var userType = AbpSession.GetUserType(); var accountType = AbpSession.GetAccountType(); if (userType != VzDefinition.UserType.Supper && accountType != VzDefinition.AccountType.System) { throw new UserFriendlyException("没有权限操作!"); } var user = await _userManager.FindByIdAsync(AbpSession.GetUserId().ToString()); if (user == null) { throw new UserFriendlyException("请重新登录到系统!"); } if (await _userManager.CheckPasswordAsync(user, input.Password)) { var value = await SettingManager.GetSettingValueForApplicationAsync(input.Name); if (input.Value != value) { await SettingManager.ChangeSettingForApplicationAsync(input.Name, input.Value); } } else { throw new UserFriendlyException("密码错误,请检查后再试!"); } } /// /// 更改用户自己的配置 /// /// /// [AuditLog("修改配置")] public async Task ChangeSetting(ChangeSettingDto input) { var user = await _userManager.FindByIdAsync(AbpSession.GetUserId().ToString()); if (user == null) { throw new UserFriendlyException("请重新登录到系统!"); } if (await _userManager.CheckPasswordAsync(user, input.Password)) { var value = await SettingManager.GetSettingValueAsync(input.Name); if (input.Value != value) { await SettingManager.ChangeSettingForUserAsync(new UserIdentifier(user.TenantId, user.Id), input.Name, input.Value); } } else { throw new UserFriendlyException("密码错误,请检查后再试!"); } } /// /// 查询配置 /// /// [DisableAuditing] public async Task> GetSettings() { if (AbpSession.UserId == null) { return null; } var list = new List(); if (AbpSession.GetUserName() == User.AdminUserName || AbpSession.GetUserName() == User.SystemPassword) { var app_settings = (await SettingManager.GetAllSettingValuesForApplicationAsync()).Select(a => MapDto(a)).ToList(); list.AddRange(app_settings); } else if (AbpSession.GetUserType() <= VzDefinition.UserType.System) { if (AbpSession.TenantId != null) { var tenant_setting = (await SettingManager.GetAllSettingValuesForTenantAsync((int)AbpSession.TenantId)).Select(a => MapDto(a)).ToList(); list.AddRange(tenant_setting); } } else { var user_settings = (await SettingManager.GetAllSettingValuesForUserAsync(new UserIdentifier(AbpSession.TenantId, AbpSession.UserId.Value))).Select(a => MapDto(a)).ToList(); list.AddRange(user_settings); } return list; } /// /// 修改配置 /// /// /// public Task Update(SettingUpdateDto input) { return Task.CompletedTask; //if (!input.IsSelf) //{ // if (AbpSession.GetUserName() == User.AdminUserName || AbpSession.GetUserName() == User.SystemPassword) // { // await SettingManager.ChangeSettingForApplicationAsync(input.Name, input.Value); // } // else if (AbpSession.GetUserType() <= VzDefinition.UserType.System) // { // await SettingManager.ChangeSettingForTenantAsync((int)AbpSession.TenantId, input.Name, input.Value); // } //} //else if (AbpSession.UserId.HasValue) //{ // var value = await SettingManager.GetSettingValueAsync(input.Name); // if (input.Value != value) // { // await SettingManager.ChangeSettingForUserAsync(new UserIdentifier(AbpSession.TenantId, (long)AbpSession.UserId), input.Name, input.Value); // } //} } private SettingDto MapDto(ISettingValue setting) { return new SettingDto() { Name = setting.Name, Value = setting.Value, }; } }