Merge pull request #4672 from sbwalker/dev
fix #4667 - installation issues when running on IIS
This commit is contained in:
commit
628c504f84
|
@ -375,7 +375,6 @@ namespace Oqtane.Infrastructure
|
||||||
AddEFMigrationsHistory(sql, _configManager.GetSetting($"{SettingKeys.ConnectionStringsSection}:{tenant.DBConnectionString}", ""), tenant.DBType, tenant.Version, false);
|
AddEFMigrationsHistory(sql, _configManager.GetSetting($"{SettingKeys.ConnectionStringsSection}:{tenant.DBConnectionString}", ""), tenant.DBType, tenant.Version, false);
|
||||||
// push latest model into database
|
// push latest model into database
|
||||||
tenantDbContext.Database.Migrate();
|
tenantDbContext.Database.Migrate();
|
||||||
result.Success = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
@ -384,35 +383,35 @@ namespace Oqtane.Infrastructure
|
||||||
_filelogger.LogError(Utilities.LogMessage(this, result.Message));
|
_filelogger.LogError(Utilities.LogMessage(this, result.Message));
|
||||||
}
|
}
|
||||||
|
|
||||||
// execute any version specific upgrade logic
|
if (string.IsNullOrEmpty(result.Message))
|
||||||
var version = tenant.Version;
|
|
||||||
var index = Array.FindIndex(versions, item => item == version);
|
|
||||||
if (index != (versions.Length - 1))
|
|
||||||
{
|
{
|
||||||
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 = string.IsNullOrEmpty(result.Message);
|
||||||
{
|
|
||||||
result.Success = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -588,7 +587,7 @@ namespace Oqtane.Infrastructure
|
||||||
|
|
||||||
// add host role
|
// add host role
|
||||||
var hostRoleId = roles.GetRoles(user.SiteId, true).FirstOrDefault(item => item.Name == RoleNames.Host)?.RoleId ?? 0;
|
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);
|
userRoles.AddUserRole(userRole);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -75,6 +75,7 @@ namespace Oqtane.Repository
|
||||||
userrole.RoleId = role.RoleId;
|
userrole.RoleId = role.RoleId;
|
||||||
userrole.EffectiveDate = null;
|
userrole.EffectiveDate = null;
|
||||||
userrole.ExpiryDate = null;
|
userrole.ExpiryDate = null;
|
||||||
|
userrole.IgnoreSecurityStamp = true;
|
||||||
_userroles.AddUserRole(userrole);
|
_userroles.AddUserRole(userrole);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -72,8 +72,13 @@ namespace Oqtane.Repository
|
||||||
DeleteUserRoles(userRole.UserId);
|
DeleteUserRoles(userRole.UserId);
|
||||||
}
|
}
|
||||||
|
|
||||||
UpdateSecurityStamp(userRole.UserId);
|
if (!userRole.IgnoreSecurityStamp)
|
||||||
|
{
|
||||||
|
UpdateSecurityStamp(userRole.UserId);
|
||||||
|
}
|
||||||
|
|
||||||
|
RefreshCache(userRole.UserId);
|
||||||
|
|
||||||
return userRole;
|
return userRole;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -83,7 +88,12 @@ namespace Oqtane.Repository
|
||||||
db.Entry(userRole).State = EntityState.Modified;
|
db.Entry(userRole).State = EntityState.Modified;
|
||||||
db.SaveChanges();
|
db.SaveChanges();
|
||||||
|
|
||||||
UpdateSecurityStamp(userRole.UserId);
|
if (!userRole.IgnoreSecurityStamp)
|
||||||
|
{
|
||||||
|
UpdateSecurityStamp(userRole.UserId);
|
||||||
|
}
|
||||||
|
|
||||||
|
RefreshCache(userRole.UserId);
|
||||||
|
|
||||||
return userRole;
|
return userRole;
|
||||||
}
|
}
|
||||||
|
@ -144,6 +154,7 @@ namespace Oqtane.Repository
|
||||||
db.SaveChanges();
|
db.SaveChanges();
|
||||||
|
|
||||||
UpdateSecurityStamp(userRole.UserId);
|
UpdateSecurityStamp(userRole.UserId);
|
||||||
|
RefreshCache(userRole.UserId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DeleteUserRoles(int userId)
|
public void DeleteUserRoles(int userId)
|
||||||
|
@ -156,11 +167,11 @@ namespace Oqtane.Repository
|
||||||
db.SaveChanges();
|
db.SaveChanges();
|
||||||
|
|
||||||
UpdateSecurityStamp(userId);
|
UpdateSecurityStamp(userId);
|
||||||
|
RefreshCache(userId);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateSecurityStamp(int userId)
|
private void UpdateSecurityStamp(int userId)
|
||||||
{
|
{
|
||||||
// update user security stamp
|
|
||||||
using var db = _dbContextFactory.CreateDbContext();
|
using var db = _dbContextFactory.CreateDbContext();
|
||||||
var user = db.User.Find(userId);
|
var user = db.User.Find(userId);
|
||||||
if (user != null)
|
if (user != null)
|
||||||
|
@ -168,11 +179,13 @@ namespace Oqtane.Repository
|
||||||
var identityuser = _identityUserManager.FindByNameAsync(user.Username).GetAwaiter().GetResult();
|
var identityuser = _identityUserManager.FindByNameAsync(user.Username).GetAwaiter().GetResult();
|
||||||
if (identityuser != null)
|
if (identityuser != null)
|
||||||
{
|
{
|
||||||
_identityUserManager.UpdateSecurityStampAsync(identityuser);
|
_identityUserManager.UpdateSecurityStampAsync(identityuser).GetAwaiter().GetResult();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// refresh cache
|
private void RefreshCache(int userId)
|
||||||
|
{
|
||||||
var alias = _tenantManager.GetAlias();
|
var alias = _tenantManager.GetAlias();
|
||||||
if (alias != null)
|
if (alias != null)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
|
|
||||||
namespace Oqtane.Models
|
namespace Oqtane.Models
|
||||||
{
|
{
|
||||||
|
@ -26,11 +27,18 @@ namespace Oqtane.Models
|
||||||
/// Start of when this assignment is valid. See also <see cref="ExpiryDate"/>
|
/// Start of when this assignment is valid. See also <see cref="ExpiryDate"/>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public DateTime? EffectiveDate { get; set; }
|
public DateTime? EffectiveDate { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// End of when this assignment is valid. See also <see cref="EffectiveDate"/>
|
/// End of when this assignment is valid. See also <see cref="EffectiveDate"/>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public DateTime? ExpiryDate { get; set; }
|
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>
|
/// <summary>
|
||||||
/// Direct reference to the <see cref="Role"/> object.
|
/// Direct reference to the <see cref="Role"/> object.
|
||||||
/// TODO: todoc - is this always populated?
|
/// TODO: todoc - is this always populated?
|
||||||
|
|
Loading…
Reference in New Issue
Block a user