From 39bd401c4fa00ce8c53ac29f7b2f7cf9542b3be2 Mon Sep 17 00:00:00 2001 From: Jicheng Lu <103353@smsassist.com> Date: Fri, 1 Nov 2024 13:17:25 -0500 Subject: [PATCH] refine code --- .../FileRepository/FileRepository.User.cs | 2 +- .../Controllers/AgentController.cs | 19 +++++++++++++++++-- .../Users/UserAgentActionViewModel.cs | 2 +- .../Repository/MongoRepository.User.cs | 9 ++++++++- 4 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.User.cs b/src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.User.cs index 9ee6bdb4..650cdeeb 100644 --- a/src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.User.cs +++ b/src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.User.cs @@ -144,7 +144,7 @@ public partial class FileRepository var userFile = Path.Combine(dir, USER_FILE); user.UpdatedTime = DateTime.UtcNow; - File.WriteAllText(_dbSettings.FileRepository, JsonSerializer.Serialize(user, _options)); + File.WriteAllText(userFile, JsonSerializer.Serialize(user, _options)); if (isUpdateUserAgents) { diff --git a/src/Infrastructure/BotSharp.OpenAPI/Controllers/AgentController.cs b/src/Infrastructure/BotSharp.OpenAPI/Controllers/AgentController.cs index 6a24c584..54c9b75e 100644 --- a/src/Infrastructure/BotSharp.OpenAPI/Controllers/AgentController.cs +++ b/src/Infrastructure/BotSharp.OpenAPI/Controllers/AgentController.cs @@ -76,12 +76,24 @@ public class AgentController : ControllerBase } [HttpGet("/agents")] - public async Task> GetAgents([FromQuery] AgentFilter filter) + public async Task> GetAgents([FromQuery] AgentFilter filter, [FromQuery] bool checkAuth = false) { var agentSetting = _services.GetRequiredService(); var userService = _services.GetRequiredService(); + List agents; var pagedAgents = await _agentService.GetAgents(filter); + + if (!checkAuth) + { + agents = pagedAgents?.Items?.Select(x => AgentViewModel.FromAgent(x))?.ToList() ?? []; + return new PagedItems + { + Items = agents, + Count = pagedAgents?.Count ?? 0 + }; + } + var userAgents = new List(); var user = await userService.GetUser(_user.Id); if (!UserConstant.AdminRoles.Contains(user.Role)) @@ -89,16 +101,19 @@ public class AgentController : ControllerBase userAgents = await _agentService.GetUserAgents(user.Id); } - var agents = pagedAgents?.Items?.Select(x => + agents = pagedAgents?.Items?.Select(x => { var chatable = true; + var editable = true; if (!UserConstant.AdminRoles.Contains(user.Role)) { var actions = userAgents.FirstOrDefault(a => a.AgentId == x.Id)?.Actions ?? []; chatable = actions.Contains(UserAction.Chat); + editable = actions.Contains(UserAction.Edit); } var model = AgentViewModel.FromAgent(x); + model.Editable = editable; model.Chatable = chatable; return model; })?.ToList() ?? []; diff --git a/src/Infrastructure/BotSharp.OpenAPI/ViewModels/Users/UserAgentActionViewModel.cs b/src/Infrastructure/BotSharp.OpenAPI/ViewModels/Users/UserAgentActionViewModel.cs index adf3d45b..43c9fc4d 100644 --- a/src/Infrastructure/BotSharp.OpenAPI/ViewModels/Users/UserAgentActionViewModel.cs +++ b/src/Infrastructure/BotSharp.OpenAPI/ViewModels/Users/UserAgentActionViewModel.cs @@ -6,7 +6,7 @@ namespace BotSharp.OpenAPI.ViewModels.Users; public class UserAgentActionViewModel { [JsonPropertyName("id")] - public string Id { get; set; } + public string? Id { get; set; } [JsonPropertyName("agent_id")] public string AgentId { get; set; } diff --git a/src/Plugins/BotSharp.Plugin.MongoStorage/Repository/MongoRepository.User.cs b/src/Plugins/BotSharp.Plugin.MongoStorage/Repository/MongoRepository.User.cs index 4bd31fa6..a9894638 100644 --- a/src/Plugins/BotSharp.Plugin.MongoStorage/Repository/MongoRepository.User.cs +++ b/src/Plugins/BotSharp.Plugin.MongoStorage/Repository/MongoRepository.User.cs @@ -237,7 +237,9 @@ public partial class MongoRepository var userFilter = Builders.Filter.Eq(x => x.Id, user.Id); var userUpdate = Builders.Update + .Set(x => x.Type, user.Type) .Set(x => x.Role, user.Role) + .Set(x => x.Permissions, user.Permissions) .Set(x => x.UpdatedTime, DateTime.UtcNow); _dc.Users.UpdateOne(userFilter, userUpdate); @@ -254,7 +256,12 @@ public partial class MongoRepository UpdatedTime = DateTime.UtcNow })?.ToList() ?? []; - _dc.UserAgents.DeleteMany(Builders.Filter.Nin(x => x.Id, userAgentDocs.Select(x => x.Id))); + var toDelete = _dc.UserAgents.Find(Builders.Filter.And( + Builders.Filter.Eq(x => x.UserId, user.Id), + Builders.Filter.Nin(x => x.Id, userAgentDocs.Select(x => x.Id)) + )).ToList(); + + _dc.UserAgents.DeleteMany(Builders.Filter.In(x => x.Id, toDelete.Select(x => x.Id))); foreach (var doc in userAgentDocs) { var userAgentFilter = Builders.Filter.Eq(x => x.Id, doc.Id);