diff --git a/.vscode/launch.json b/.vscode/launch.json index 2d033870..03869ca9 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -53,7 +53,7 @@ "AYANOVA_FOLDER_USER_FILES": "c:\\temp\\RavenTestData\\userfiles", "AYANOVA_FOLDER_BACKUP_FILES": "c:\\temp\\RavenTestData\\backupfiles", "AYANOVA_FOLDER_TEMPORARY_SERVER_FILES": "c:\\temp\\RavenTestData\\tempfiles", - "AYANOVA_SERVER_TEST_MODE": "true", + "AYANOVA_SERVER_TEST_MODE": "false", "AYANOVA_SERVER_TEST_MODE_SEEDLEVEL": "large", "AYANOVA_SERVER_TEST_MODE_TZ_OFFSET": "-7", "AYANOVA_BACKUP_PG_DUMP_PATH": "C:\\data\\code\\postgres_13\\bin\\" diff --git a/server/AyaNova/ControllerHelpers/UserRolesFromContext.cs b/server/AyaNova/ControllerHelpers/UserRolesFromContext.cs index 18f7eb03..273676f7 100644 --- a/server/AyaNova/ControllerHelpers/UserRolesFromContext.cs +++ b/server/AyaNova/ControllerHelpers/UserRolesFromContext.cs @@ -1,4 +1,3 @@ -using EnumsNET; using System.Collections.Generic; using AyaNova.Biz; diff --git a/server/AyaNova/ControllerHelpers/UserTypeFromContext.cs b/server/AyaNova/ControllerHelpers/UserTypeFromContext.cs new file mode 100644 index 00000000..b0cb7a67 --- /dev/null +++ b/server/AyaNova/ControllerHelpers/UserTypeFromContext.cs @@ -0,0 +1,17 @@ +using System.Collections.Generic; +using AyaNova.Biz; + +namespace AyaNova.Api.ControllerHelpers +{ + + + internal static class UserTypeFromContext + { + internal static UserType Type(IDictionary HttpContextItems) + { + return (UserType)HttpContextItems["AY_USER_TYPE"]; + } + } + + +}//eons \ No newline at end of file diff --git a/server/AyaNova/Startup.cs b/server/AyaNova/Startup.cs index d59de5b7..1eefa11d 100644 --- a/server/AyaNova/Startup.cs +++ b/server/AyaNova/Startup.cs @@ -462,11 +462,12 @@ namespace AyaNova var ct = context.RequestServices.GetService(); //get the user record - var u = await ct.User.AsNoTracking().Where(a => a.Id == userId).Select(m => new { roles = m.Roles, name = m.Name, id = m.Id, translationId = m.UserOptions.TranslationId, currentAuthToken = m.CurrentAuthToken }).FirstAsync(); + var u = await ct.User.AsNoTracking().Where(a => a.Id == userId).Select(m => new { roles = m.Roles, name = m.Name, m.UserType, id = m.Id, translationId = m.UserOptions.TranslationId, currentAuthToken = m.CurrentAuthToken }).FirstAsync(); context.Request.HttpContext.Items["AY_ROLES"] = u.roles; context.Request.HttpContext.Items["AY_USERNAME"] = u.name; context.Request.HttpContext.Items["AY_USER_ID"] = u.id; context.Request.HttpContext.Items["AY_TRANSLATION_ID"] = u.translationId; + context.Request.HttpContext.Items["AY_USER_TYPE"] = u.UserType; //turned out didn't need this for v8 migrate so far, but keeping in case it turns out to be handy down the road // //Is import mode header set? diff --git a/server/AyaNova/biz/BizObjectFactory.cs b/server/AyaNova/biz/BizObjectFactory.cs index 504b5879..f7d72403 100644 --- a/server/AyaNova/biz/BizObjectFactory.cs +++ b/server/AyaNova/biz/BizObjectFactory.cs @@ -12,7 +12,11 @@ namespace AyaNova.Biz //Returns the biz object class that corresponds to the type presented //Used by SEARCH, REPORTING and objects with JOBS - internal static BizObject GetBizObject(AyaType ayaType, AyContext ct, long userId = 1, AuthorizationRoles roles = AuthorizationRoles.All, long translationId = 0) + internal static BizObject GetBizObject(AyaType ayaType, + AyContext ct, + long userId = 1, + AuthorizationRoles roles = AuthorizationRoles.All, + long translationId = 0) { if (translationId == 0) translationId = ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID; @@ -92,7 +96,7 @@ namespace AyaNova.Biz case AyaType.WorkOrderItemTravel: case AyaType.WorkOrderItemUnit: case AyaType.WorkOrderItemOutsideService: - return new WorkOrderBiz(ct, userId, translationId, roles); + return new WorkOrderBiz(ct, userId, translationId, roles, UserType.NotService);//default to not service for now arbitrarily on the principle of least access //--- case AyaType.WorkOrderTemplate: return new WorkOrderTemplateBiz(ct, userId, translationId, roles); diff --git a/server/AyaNova/biz/WorkOrderBiz.cs b/server/AyaNova/biz/WorkOrderBiz.cs index 51738ab1..b218f4df 100644 --- a/server/AyaNova/biz/WorkOrderBiz.cs +++ b/server/AyaNova/biz/WorkOrderBiz.cs @@ -18,7 +18,7 @@ namespace AyaNova.Biz { // //Feature specific roles - internal WorkOrderBiz(AyContext dbcontext, long currentUserId, long userTranslationId, AuthorizationRoles UserRoles) + internal WorkOrderBiz(AyContext dbcontext, long currentUserId, long userTranslationId, AuthorizationRoles UserRoles, UserType currentUserType) { ct = dbcontext; UserId = currentUserId; @@ -30,9 +30,17 @@ namespace AyaNova.Biz internal static WorkOrderBiz GetBiz(AyContext ct, Microsoft.AspNetCore.Http.HttpContext httpContext = null) { if (httpContext != null) - return new WorkOrderBiz(ct, UserIdFromContext.Id(httpContext.Items), UserTranslationIdFromContext.Id(httpContext.Items), UserRolesFromContext.Roles(httpContext.Items)); + return new WorkOrderBiz(ct, + UserIdFromContext.Id(httpContext.Items), + UserTranslationIdFromContext.Id(httpContext.Items), + UserRolesFromContext.Roles(httpContext.Items), + UserTypeFromContext.Type(httpContext.Items)); else - return new WorkOrderBiz(ct, 1, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, AuthorizationRoles.BizAdmin); + return new WorkOrderBiz(ct, + 1, + ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, + AuthorizationRoles.BizAdmin, + UserType.NotService);//picked not service arbitrarily, probably a non-factor } @@ -3736,7 +3744,7 @@ namespace AyaNova.Biz if (proposedObj.UnitId < 1 || !await ct.Unit.AnyAsync(x => x.Id == proposedObj.UnitId)) AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "UnitId"); - + //Any form customizations to validate? var FormCustomization = await ct.FormCustom.AsNoTracking().SingleOrDefaultAsync(z => z.FormKey == AyaType.WorkOrderItemOutsideService.ToString()); if (FormCustomization != null) @@ -4465,7 +4473,7 @@ namespace AyaNova.Biz } } - if (!await BizObjectExistsInDatabase.ExistsAsync(AyaType.Part, proposedObj.PartId, ct)) + if (!await BizObjectExistsInDatabase.ExistsAsync(AyaType.Part, proposedObj.PartId, ct)) { AddError(ApiErrorCode.NOT_FOUND, "PartId"); return; @@ -4973,7 +4981,7 @@ namespace AyaNova.Biz } } - if (proposedObj.EstimatedQuantity < 0)//negative quantities are not allowed + if (proposedObj.EstimatedQuantity < 0)//negative quantities are not allowed AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "EstimatedQuantity");