Merge pull request #4501 from sbwalker/dev

eliminate database call for authenticated users
This commit is contained in:
Shaun Walker 2024-08-09 13:00:35 -04:00 committed by GitHub
commit f0e2c9f1b6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 23 additions and 32 deletions

View File

@ -261,15 +261,16 @@
// edit mode // edit mode
if (user != null) 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; editmode = true;
} }
else else
{ {
editmode = (page.PageId == ((user.Settings.ContainsKey("CP-editmode")) ? int.Parse(user.Settings["CP-editmode"], CultureInfo.InvariantCulture) : -1)); if (editpageid != -1)
if (!editmode)
{ {
// reset edit page
var userSettings = new Dictionary<string, string> { { "CP-editmode", "-1" } }; var userSettings = new Dictionary<string, string> { { "CP-editmode", "-1" } };
await SettingService.UpdateUserSettingsAsync(userSettings, user.UserId); await SettingService.UpdateUserSettingsAsync(userSettings, user.UserId);
} }

View File

@ -109,7 +109,7 @@ namespace Oqtane.Controllers
if (ModelState.IsValid && IsAuthorized(setting.EntityName, setting.EntityId, PermissionNames.Edit)) if (ModelState.IsValid && IsAuthorized(setting.EntityName, setting.EntityId, PermissionNames.Edit))
{ {
setting = _settings.AddSetting(setting); 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); _logger.Log(LogLevel.Information, this, LogFunction.Create, "Setting Added {Setting}", setting);
} }
else else
@ -131,7 +131,7 @@ namespace Oqtane.Controllers
if (ModelState.IsValid && setting.SettingId == id && IsAuthorized(setting.EntityName, setting.EntityId, PermissionNames.Edit)) if (ModelState.IsValid && setting.SettingId == id && IsAuthorized(setting.EntityName, setting.EntityId, PermissionNames.Edit))
{ {
setting = _settings.UpdateSetting(setting); 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); _logger.Log(LogLevel.Information, this, LogFunction.Update, "Setting Updated {Setting}", setting);
} }
else else
@ -154,7 +154,7 @@ namespace Oqtane.Controllers
if (IsAuthorized(setting.EntityName, setting.EntityId, PermissionNames.Edit)) if (IsAuthorized(setting.EntityName, setting.EntityId, PermissionNames.Edit))
{ {
_settings.DeleteSetting(setting.EntityName, id); _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); _logger.Log(LogLevel.Information, this, LogFunction.Delete, "Setting Deleted {Setting}", setting);
} }
else else
@ -300,7 +300,7 @@ namespace Oqtane.Controllers
return filter; 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); _syncManager.AddSyncEvent(_alias, EntityName + "Setting", SettingId, Action);
@ -311,6 +311,9 @@ namespace Oqtane.Controllers
case EntityNames.Site: case EntityNames.Site:
_syncManager.AddSyncEvent(_alias, EntityNames.Site, _alias.SiteId, SyncEventActions.Refresh); _syncManager.AddSyncEvent(_alias, EntityNames.Site, _alias.SiteId, SyncEventActions.Refresh);
break; break;
case EntityNames.User:
_syncManager.AddSyncEvent(_alias, EntityName, EntityId, SyncEventActions.Update);
break;
} }
} }
} }

View File

@ -26,19 +26,17 @@ namespace Oqtane.Controllers
private readonly IUserManager _userManager; private readonly IUserManager _userManager;
private readonly ISiteRepository _sites; private readonly ISiteRepository _sites;
private readonly IUserPermissions _userPermissions; private readonly IUserPermissions _userPermissions;
private readonly ISettingRepository _settings;
private readonly IJwtManager _jwtManager; private readonly IJwtManager _jwtManager;
private readonly IFileRepository _files; private readonly IFileRepository _files;
private readonly ILogManager _logger; 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; _users = users;
_tenantManager = tenantManager; _tenantManager = tenantManager;
_userManager = userManager; _userManager = userManager;
_sites = sites; _sites = sites;
_userPermissions = userPermissions; _userPermissions = userPermissions;
_settings = settings;
_jwtManager = jwtManager; _jwtManager = jwtManager;
_files = files; _files = files;
_logger = logger; _logger = logger;
@ -56,12 +54,6 @@ namespace Oqtane.Controllers
{ {
HttpContext.Response.StatusCode = (int)HttpStatusCode.NotFound; HttpContext.Response.StatusCode = (int)HttpStatusCode.NotFound;
} }
else
{
List<Setting> 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); return Filter(user);
} }
else else
@ -83,12 +75,6 @@ namespace Oqtane.Controllers
{ {
HttpContext.Response.StatusCode = (int)HttpStatusCode.NotFound; HttpContext.Response.StatusCode = (int)HttpStatusCode.NotFound;
} }
else
{
List<Setting> 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); return Filter(user);
} }
else else
@ -112,12 +98,6 @@ namespace Oqtane.Controllers
{ {
HttpContext.Response.StatusCode = (int)HttpStatusCode.NotFound; HttpContext.Response.StatusCode = (int)HttpStatusCode.NotFound;
} }
else
{
List<Setting> 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); return Filter(user);
} }
else else

View File

@ -29,6 +29,12 @@ namespace Oqtane.Infrastructure.EventSubscribers
_cache.Remove($"assemblieslist:{syncEvent.TenantId}:{syncEvent.EntityId}"); _cache.Remove($"assemblieslist:{syncEvent.TenantId}:{syncEvent.EntityId}");
_cache.Remove($"assemblies:{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}");
}
} }
} }
} }

View File

@ -64,6 +64,9 @@ namespace Oqtane.Managers
{ {
user.SiteId = siteid; user.SiteId = siteid;
user.Roles = GetUserRoles(user.UserId, user.SiteId); user.Roles = GetUserRoles(user.UserId, user.SiteId);
List<Setting> 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; return user;
}); });
@ -74,8 +77,7 @@ namespace Oqtane.Managers
User user = _users.GetUser(username); User user = _users.GetUser(username);
if (user != null) if (user != null)
{ {
user.SiteId = siteid; user = GetUser(user.UserId, siteid);
user.Roles = GetUserRoles(user.UserId, user.SiteId);
} }
return user; return user;
} }
@ -85,8 +87,7 @@ namespace Oqtane.Managers
User user = _users.GetUser(username, email); User user = _users.GetUser(username, email);
if (user != null) if (user != null)
{ {
user.SiteId = siteid; user = GetUser(user.UserId, siteid);
user.Roles = GetUserRoles(user.UserId, user.SiteId);
} }
return user; return user;
} }