This commit is contained in:
2021-09-30 23:41:56 +00:00
parent 63bdaed629
commit ec67ecab23
4 changed files with 26 additions and 12 deletions

View File

@@ -352,6 +352,13 @@ namespace AyaNova.Api.Controllers
{
//customer type has special rights restrictions for UI features so return them here so client UI can enable or disable
var effectiveRights = await UserBiz.CustomerUserEffectiveRightsAsync(u.Id);
//A non active Customer or Head Office record's contacts are also not allowed to login
if (!effectiveRights.EntityActive)
{
log.LogInformation($"Customer contact user \"{u.Name}\" attempted login was denied due to inactive parent (Customer or HeadOffice)");
await Task.Delay(AyaNova.Util.ServerBootConfig.FAILED_AUTH_DELAY);
return StatusCode(401, new ApiErrorResponse(ApiErrorCode.AUTHENTICATION_FAILED));
}
return Ok(ApiOkResponse.Response(new
{
token = token,

View File

@@ -160,6 +160,7 @@ namespace AyaNova
//This is the first log entry
logger.Info($"AYANOVA SERVER {AyaNovaVersion.VersionString} BOOTING");
Console.WriteLine($"AYANOVA SERVER {AyaNovaVersion.VersionString} BOOTING ...");
//log configuration
try
@@ -185,7 +186,7 @@ namespace AyaNova
logger.Info("OS - {0}", Environment.OSVersion.ToString());
logger.Info("TimeZone - {0}", TimeZoneInfo.Local.DisplayName);
logger.Info("OS Locale - {0}", System.Globalization.CultureInfo.CurrentCulture.EnglishName);
logger.Info("OS Locale - {0}", System.Globalization.CultureInfo.CurrentCulture.EnglishName);
logger.Debug("Machine - {0}", Environment.MachineName);
logger.Debug("User - {0}", Environment.UserName);
logger.Debug(".Net Version - {0}", Environment.Version.ToString());

View File

@@ -119,22 +119,27 @@ namespace AyaNova.Biz
List<string> AllTags = new List<string>();
AllTags.AddRange(UserInfo.Tags);
bool EntityActive = false;
//Contact is for a customer or for a head office not both so...
if (UserInfo.CustomerId != null && UserInfo.CustomerId != 0)
{
var CustomerInfo = await ct.Customer.AsNoTracking().Where(x => x.Id == UserInfo.CustomerId).Select(x => new { x.HeadOfficeId, x.Tags }).FirstAsync();
var CustomerInfo = await ct.Customer.AsNoTracking().Where(x => x.Id == UserInfo.CustomerId).Select(x => new { x.HeadOfficeId, x.Tags, x.Active }).FirstAsync();
AllTags.AddRange(CustomerInfo.Tags);
EntityActive = CustomerInfo.Active;
//does the customer have a head office??
if (CustomerInfo.HeadOfficeId != null && CustomerInfo.HeadOfficeId != 0)
AllTags.AddRange(await ct.HeadOffice.AsNoTracking().Where(x => x.Id == CustomerInfo.HeadOfficeId).Select(x => x.Tags).FirstAsync());
}
else
if (UserInfo.HeadOfficeId != null && UserInfo.HeadOfficeId != 0)
AllTags.AddRange(await ct.HeadOffice.AsNoTracking().Where(x => x.Id == UserInfo.HeadOfficeId).Select(x => x.Tags).FirstAsync());
else if (UserInfo.HeadOfficeId != null && UserInfo.HeadOfficeId != 0)
{
var HOInfo = await ct.HeadOffice.AsNoTracking().Where(x => x.Id == UserInfo.HeadOfficeId).Select(x => new { x.Tags, x.Active }).FirstAsync();
AllTags.AddRange(HOInfo.Tags);
EntityActive = HOInfo.Active;
}
long EntityId=0;
if(UserInfo.UserType==UserType.Customer) EntityId=UserInfo.CustomerId??0;
if(UserInfo.UserType==UserType.HeadOffice) EntityId=UserInfo.HeadOfficeId??0;
long EntityId = 0;
if (UserInfo.UserType == UserType.Customer) EntityId = UserInfo.CustomerId ?? 0;
if (UserInfo.UserType == UserType.HeadOffice) EntityId = UserInfo.HeadOfficeId ?? 0;
return new CustomerRightsRecord(
@@ -182,7 +187,8 @@ namespace AyaNova.Biz
AllTags,
AyaNova.Util.ServerGlobalBizSettings.Cache.CustomerAllowNotifyWOCompletedInTags,
AyaNova.Util.ServerGlobalBizSettings.Cache.CustomerAllowNotifyWOCompletedOutTags),
EntityId
EntityId,
EntityActive
);
}
@@ -742,7 +748,7 @@ namespace AyaNova.Biz
private async Task ValidateAsync(User proposedObj, User currentObj)
{
//skip validation if seeding
if(ServerBootConfig.SEEDING) return;
if (ServerBootConfig.SEEDING) return;
//run validation and biz rules
bool isNew = currentObj == null;
@@ -1179,7 +1185,7 @@ namespace AyaNova.Biz
public async Task HandlePotentialNotificationEvent(AyaEvent ayaEvent, ICoreBizObjectModel proposedObj, ICoreBizObjectModel currentObj = null)
{
ILogger log = AyaNova.Util.ApplicationLogging.CreateLogger<UserBiz>();
if(ServerBootConfig.SEEDING || ServerBootConfig.MIGRATING) return;
if (ServerBootConfig.SEEDING || ServerBootConfig.MIGRATING) return;
log.LogDebug($"HandlePotentialNotificationEvent processing: [AyaType:{this.BizType}, AyaEvent:{ayaEvent}]");
bool isNew = currentObj == null;

View File

@@ -98,7 +98,7 @@ namespace AyaNova.Models
}
//Used internally and at client end as extended rights atop roles system in relation only to Contact (customer type users)
public record CustomerRightsRecord(bool CSR, bool WO, bool WOWIKI, bool UserSettings, bool NotifyServiceImminent, bool NotifyCSRAccepted, bool NotifyCSRRejected, bool NotifyWOCreated, bool NotifyWOCompleted, long EntityId);
public record CustomerRightsRecord(bool CSR, bool WO, bool WOWIKI, bool UserSettings, bool NotifyServiceImminent, bool NotifyCSRAccepted, bool NotifyCSRRejected, bool NotifyWOCreated, bool NotifyWOCompleted, long EntityId, bool EntityActive);
}
/*
CREATE TABLE [dbo].[AGLOBAL](