fix #4667 - installation issues when running on IIS

This commit is contained in:
sbwalker 2024-09-26 13:33:16 -04:00
parent 4511acf273
commit e1ada78c1f
4 changed files with 48 additions and 27 deletions

View File

@ -375,7 +375,6 @@ namespace Oqtane.Infrastructure
AddEFMigrationsHistory(sql, _configManager.GetSetting($"{SettingKeys.ConnectionStringsSection}:{tenant.DBConnectionString}", ""), tenant.DBType, tenant.Version, false);
// push latest model into database
tenantDbContext.Database.Migrate();
result.Success = true;
}
}
catch (Exception ex)
@ -384,35 +383,35 @@ namespace Oqtane.Infrastructure
_filelogger.LogError(Utilities.LogMessage(this, result.Message));
}
// execute any version specific upgrade logic
var version = tenant.Version;
var index = Array.FindIndex(versions, item => item == version);
if (index != (versions.Length - 1))
if (string.IsNullOrEmpty(result.Message))
{
try
// execute any version specific upgrade logic
var version = tenant.Version;
var index = Array.FindIndex(versions, item => item == version);
if (index != (versions.Length - 1))
{
for (var i = (index + 1); i < versions.Length; i++)
try
{
upgrades.Upgrade(tenant, versions[i]);
for (var i = (index + 1); i < versions.Length; i++)
{
upgrades.Upgrade(tenant, versions[i]);
}
tenant.Version = versions[versions.Length - 1];
db.Entry(tenant).State = EntityState.Modified;
db.SaveChanges();
}
catch (Exception ex)
{
result.Message = "An Error Occurred Executing Upgrade Logic On Tenant " + tenant.Name + ". " + ex.ToString();
_filelogger.LogError(Utilities.LogMessage(this, result.Message));
}
tenant.Version = versions[versions.Length - 1];
db.Entry(tenant).State = EntityState.Modified;
db.SaveChanges();
}
catch (Exception ex)
{
result.Message = "An Error Occurred Executing Upgrade Logic On Tenant " + tenant.Name + ". " + ex.ToString();
_filelogger.LogError(Utilities.LogMessage(this, result.Message));
}
}
}
}
}
if (string.IsNullOrEmpty(result.Message))
{
result.Success = true;
}
result.Success = string.IsNullOrEmpty(result.Message);
return result;
}
@ -588,7 +587,7 @@ namespace Oqtane.Infrastructure
// add host role
var hostRoleId = roles.GetRoles(user.SiteId, true).FirstOrDefault(item => item.Name == RoleNames.Host)?.RoleId ?? 0;
var userRole = new UserRole { UserId = user.UserId, RoleId = hostRoleId, EffectiveDate = null, ExpiryDate = null };
var userRole = new UserRole { UserId = user.UserId, RoleId = hostRoleId, EffectiveDate = null, ExpiryDate = null, IgnoreSecurityStamp = true };
userRoles.AddUserRole(userRole);
}
}

View File

@ -75,6 +75,7 @@ namespace Oqtane.Repository
userrole.RoleId = role.RoleId;
userrole.EffectiveDate = null;
userrole.ExpiryDate = null;
userrole.IgnoreSecurityStamp = true;
_userroles.AddUserRole(userrole);
}

View File

@ -72,8 +72,13 @@ namespace Oqtane.Repository
DeleteUserRoles(userRole.UserId);
}
UpdateSecurityStamp(userRole.UserId);
if (!userRole.IgnoreSecurityStamp)
{
UpdateSecurityStamp(userRole.UserId);
}
RefreshCache(userRole.UserId);
return userRole;
}
@ -83,7 +88,12 @@ namespace Oqtane.Repository
db.Entry(userRole).State = EntityState.Modified;
db.SaveChanges();
UpdateSecurityStamp(userRole.UserId);
if (!userRole.IgnoreSecurityStamp)
{
UpdateSecurityStamp(userRole.UserId);
}
RefreshCache(userRole.UserId);
return userRole;
}
@ -144,6 +154,7 @@ namespace Oqtane.Repository
db.SaveChanges();
UpdateSecurityStamp(userRole.UserId);
RefreshCache(userRole.UserId);
}
public void DeleteUserRoles(int userId)
@ -156,11 +167,11 @@ namespace Oqtane.Repository
db.SaveChanges();
UpdateSecurityStamp(userId);
RefreshCache(userId);
}
private void UpdateSecurityStamp(int userId)
{
// update user security stamp
using var db = _dbContextFactory.CreateDbContext();
var user = db.User.Find(userId);
if (user != null)
@ -168,11 +179,13 @@ namespace Oqtane.Repository
var identityuser = _identityUserManager.FindByNameAsync(user.Username).GetAwaiter().GetResult();
if (identityuser != null)
{
_identityUserManager.UpdateSecurityStampAsync(identityuser);
_identityUserManager.UpdateSecurityStampAsync(identityuser).GetAwaiter().GetResult();
}
}
}
// refresh cache
private void RefreshCache(int userId)
{
var alias = _tenantManager.GetAlias();
if (alias != null)
{

View File

@ -1,4 +1,5 @@
using System;
using System.ComponentModel.DataAnnotations.Schema;
namespace Oqtane.Models
{
@ -26,11 +27,18 @@ namespace Oqtane.Models
/// Start of when this assignment is valid. See also <see cref="ExpiryDate"/>
/// </summary>
public DateTime? EffectiveDate { get; set; }
/// <summary>
/// End of when this assignment is valid. See also <see cref="EffectiveDate"/>
/// </summary>
public DateTime? ExpiryDate { get; set; }
/// <summary>
/// Indicates that the User Security Stamp should not be updated when this user role is added or updated
/// </summary>
[NotMapped]
public bool IgnoreSecurityStamp { get; set; }
/// <summary>
/// Direct reference to the <see cref="Role"/> object.
/// TODO: todoc - is this always populated?