diff --git a/Oqtane.Client/UI/SiteRouter.razor b/Oqtane.Client/UI/SiteRouter.razor index 0ca3b5ea..ca7dfe40 100644 --- a/Oqtane.Client/UI/SiteRouter.razor +++ b/Oqtane.Client/UI/SiteRouter.razor @@ -261,15 +261,16 @@ // edit mode if (user != null) { - if (querystring.ContainsKey("editmode") && querystring["edit"] == "true") + var editpageid = user.Settings.ContainsKey("CP-editmode") ? int.Parse(user.Settings["CP-editmode"], CultureInfo.InvariantCulture) : -1; + if ((querystring.ContainsKey("edit") && querystring["edit"] == "true") || page.PageId == editpageid) { editmode = true; } else { - editmode = (page.PageId == ((user.Settings.ContainsKey("CP-editmode")) ? int.Parse(user.Settings["CP-editmode"], CultureInfo.InvariantCulture) : -1)); - if (!editmode) + if (editpageid != -1) { + // reset edit page var userSettings = new Dictionary { { "CP-editmode", "-1" } }; await SettingService.UpdateUserSettingsAsync(userSettings, user.UserId); } diff --git a/Oqtane.Server/Controllers/SettingController.cs b/Oqtane.Server/Controllers/SettingController.cs index b00bf8af..8dd1b7c3 100644 --- a/Oqtane.Server/Controllers/SettingController.cs +++ b/Oqtane.Server/Controllers/SettingController.cs @@ -109,7 +109,7 @@ namespace Oqtane.Controllers if (ModelState.IsValid && IsAuthorized(setting.EntityName, setting.EntityId, PermissionNames.Edit)) { setting = _settings.AddSetting(setting); - AddSyncEvent(setting.EntityName, setting.SettingId, SyncEventActions.Create); + AddSyncEvent(setting.EntityName, setting.EntityId, setting.SettingId, SyncEventActions.Create); _logger.Log(LogLevel.Information, this, LogFunction.Create, "Setting Added {Setting}", setting); } else @@ -131,7 +131,7 @@ namespace Oqtane.Controllers if (ModelState.IsValid && setting.SettingId == id && IsAuthorized(setting.EntityName, setting.EntityId, PermissionNames.Edit)) { setting = _settings.UpdateSetting(setting); - AddSyncEvent(setting.EntityName, setting.SettingId, SyncEventActions.Update); + AddSyncEvent(setting.EntityName, setting.EntityId, setting.SettingId, SyncEventActions.Update); _logger.Log(LogLevel.Information, this, LogFunction.Update, "Setting Updated {Setting}", setting); } else @@ -154,7 +154,7 @@ namespace Oqtane.Controllers if (IsAuthorized(setting.EntityName, setting.EntityId, PermissionNames.Edit)) { _settings.DeleteSetting(setting.EntityName, id); - AddSyncEvent(setting.EntityName, setting.SettingId, SyncEventActions.Delete); + AddSyncEvent(setting.EntityName, setting.EntityId, setting.SettingId, SyncEventActions.Delete); _logger.Log(LogLevel.Information, this, LogFunction.Delete, "Setting Deleted {Setting}", setting); } else @@ -300,7 +300,7 @@ namespace Oqtane.Controllers return filter; } - private void AddSyncEvent(string EntityName, int SettingId, string Action) + private void AddSyncEvent(string EntityName, int EntityId, int SettingId, string Action) { _syncManager.AddSyncEvent(_alias, EntityName + "Setting", SettingId, Action); @@ -311,6 +311,9 @@ namespace Oqtane.Controllers case EntityNames.Site: _syncManager.AddSyncEvent(_alias, EntityNames.Site, _alias.SiteId, SyncEventActions.Refresh); break; + case EntityNames.User: + _syncManager.AddSyncEvent(_alias, EntityName, EntityId, SyncEventActions.Update); + break; } } } diff --git a/Oqtane.Server/Controllers/UserController.cs b/Oqtane.Server/Controllers/UserController.cs index 96e02e7a..549e00e3 100644 --- a/Oqtane.Server/Controllers/UserController.cs +++ b/Oqtane.Server/Controllers/UserController.cs @@ -26,19 +26,17 @@ namespace Oqtane.Controllers private readonly IUserManager _userManager; private readonly ISiteRepository _sites; private readonly IUserPermissions _userPermissions; - private readonly ISettingRepository _settings; private readonly IJwtManager _jwtManager; private readonly IFileRepository _files; private readonly ILogManager _logger; - public UserController(IUserRepository users, ITenantManager tenantManager, IUserManager userManager, ISiteRepository sites, IUserPermissions userPermissions, ISettingRepository settings, IJwtManager jwtManager, IFileRepository files, ILogManager logger) + public UserController(IUserRepository users, ITenantManager tenantManager, IUserManager userManager, ISiteRepository sites, IUserPermissions userPermissions, IJwtManager jwtManager, IFileRepository files, ILogManager logger) { _users = users; _tenantManager = tenantManager; _userManager = userManager; _sites = sites; _userPermissions = userPermissions; - _settings = settings; _jwtManager = jwtManager; _files = files; _logger = logger; @@ -56,12 +54,6 @@ namespace Oqtane.Controllers { HttpContext.Response.StatusCode = (int)HttpStatusCode.NotFound; } - else - { - List settings = _settings.GetSettings(EntityNames.User, user.UserId).ToList(); - user.Settings = settings.Where(item => !item.IsPrivate || _userPermissions.GetUser(User).UserId == user.UserId) - .ToDictionary(setting => setting.SettingName, setting => setting.SettingValue); - } return Filter(user); } else @@ -83,12 +75,6 @@ namespace Oqtane.Controllers { HttpContext.Response.StatusCode = (int)HttpStatusCode.NotFound; } - else - { - List settings = _settings.GetSettings(EntityNames.User, user.UserId).ToList(); - user.Settings = settings.Where(item => !item.IsPrivate || _userPermissions.GetUser(User).UserId == user.UserId) - .ToDictionary(setting => setting.SettingName, setting => setting.SettingValue); - } return Filter(user); } else @@ -112,12 +98,6 @@ namespace Oqtane.Controllers { HttpContext.Response.StatusCode = (int)HttpStatusCode.NotFound; } - else - { - List settings = _settings.GetSettings(EntityNames.User, user.UserId).ToList(); - user.Settings = settings.Where(item => !item.IsPrivate || _userPermissions.GetUser(User).UserId == user.UserId) - .ToDictionary(setting => setting.SettingName, setting => setting.SettingValue); - } return Filter(user); } else diff --git a/Oqtane.Server/Infrastructure/EventSubscribers/CacheInvalidationEventSubscriber.cs b/Oqtane.Server/Infrastructure/EventSubscribers/CacheInvalidationEventSubscriber.cs index 5944ed59..f3463439 100644 --- a/Oqtane.Server/Infrastructure/EventSubscribers/CacheInvalidationEventSubscriber.cs +++ b/Oqtane.Server/Infrastructure/EventSubscribers/CacheInvalidationEventSubscriber.cs @@ -29,6 +29,12 @@ namespace Oqtane.Infrastructure.EventSubscribers _cache.Remove($"assemblieslist:{syncEvent.TenantId}:{syncEvent.EntityId}"); _cache.Remove($"assemblies:{syncEvent.TenantId}:{syncEvent.EntityId}"); } + + // when a users settings are changed, the user cache item needs to be refreshed + if (syncEvent.EntityName == EntityNames.User && syncEvent.Action == SyncEventActions.Update) + { + _cache.Remove($"user:{syncEvent.EntityId}:{syncEvent.TenantId}:{syncEvent.SiteId}"); + } } } } diff --git a/Oqtane.Server/Managers/UserManager.cs b/Oqtane.Server/Managers/UserManager.cs index 35bf2211..5f234c0e 100644 --- a/Oqtane.Server/Managers/UserManager.cs +++ b/Oqtane.Server/Managers/UserManager.cs @@ -64,6 +64,9 @@ namespace Oqtane.Managers { user.SiteId = siteid; user.Roles = GetUserRoles(user.UserId, user.SiteId); + List settings = _settings.GetSettings(EntityNames.User, user.UserId).ToList(); + user.Settings = settings.Where(item => !item.IsPrivate || user.UserId == user.UserId) + .ToDictionary(setting => setting.SettingName, setting => setting.SettingValue); } return user; }); @@ -74,8 +77,7 @@ namespace Oqtane.Managers User user = _users.GetUser(username); if (user != null) { - user.SiteId = siteid; - user.Roles = GetUserRoles(user.UserId, user.SiteId); + user = GetUser(user.UserId, siteid); } return user; } @@ -85,8 +87,7 @@ namespace Oqtane.Managers User user = _users.GetUser(username, email); if (user != null) { - user.SiteId = siteid; - user.Roles = GetUserRoles(user.UserId, user.SiteId); + user = GetUser(user.UserId, siteid); } return user; }