Session persistent Security Profile
This commit is contained in:
@@ -31,7 +31,7 @@ namespace Sarand.BusinessMgr.Web.Portal.App
|
||||
private SbmSessionData_Portal(long sessionIdx, SbmSessionContext sessionContext) :
|
||||
base(sessionIdx, sessionContext)
|
||||
{
|
||||
securityProfile = new SbmSecurityProfile(false);
|
||||
securityProfile_Internal = new SbmSecurityProfile(false);
|
||||
Organisation = new OrganisationData_Portal(null, null);
|
||||
User = new UserData_Portal(sessionContext, null, null);
|
||||
}
|
||||
@@ -42,7 +42,7 @@ namespace Sarand.BusinessMgr.Web.Portal.App
|
||||
public SbmSessionData_Portal(SbmSessionContext sessionContext) :
|
||||
base(0, sessionContext)
|
||||
{
|
||||
securityProfile = new SbmSecurityProfile(false);
|
||||
securityProfile_Internal = new SbmSecurityProfile(false);
|
||||
Organisation = new OrganisationData_Portal(null, null);
|
||||
User = new UserData_Portal(sessionContext, null, null);
|
||||
}
|
||||
@@ -55,7 +55,7 @@ namespace Sarand.BusinessMgr.Web.Portal.App
|
||||
base(sessionContext)
|
||||
{
|
||||
RepositoryContext = repositoryContext;
|
||||
securityProfile = new SbmSecurityProfile(false);
|
||||
securityProfile_Internal = new SbmSecurityProfile(false);
|
||||
Organisation = new OrganisationData_Portal(associationOrganisation, affiliateOrganisation);
|
||||
User = new UserData_Portal(sessionContext, securityItemUser, affiliateUser);
|
||||
}
|
||||
@@ -117,10 +117,11 @@ namespace Sarand.BusinessMgr.Web.Portal.App
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Security Profile.
|
||||
|
||||
[JsonProperty("SecurityProfile")]
|
||||
private readonly SbmSecurityProfile securityProfile;
|
||||
private readonly SbmSecurityProfile securityProfile_Internal;
|
||||
[JsonIgnore]
|
||||
public ISbmSecurityProfile_Core SecurityProfile_Core { get { return securityProfile; } }
|
||||
public ISbmSecurityProfile_Core SecurityProfile { get { return securityProfile_Internal; } }
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Organisation.
|
||||
@@ -173,12 +174,13 @@ namespace Sarand.BusinessMgr.Web.Portal.App
|
||||
{
|
||||
base.Refresh();
|
||||
// Check that user matches the session.
|
||||
if (!SysId.IsValid(securityItemUser?.Id) || (SysId.IsValid(SecurityItemId) && !SecurityItemId.Equals(securityItemUser.Id)))
|
||||
// Can only refresh existing User or populate a new one (with no details previously recorded).
|
||||
if (SysId.IsValid(securityItemUser?.Id) && SysId.IsValid(SecurityItemId) && SysId.ToLong(SecurityItemId) != SysId.ToLong(securityItemUser.Id))
|
||||
{
|
||||
SaLogger.Warn($"{SysUtil.Fn} Invalid - User Security Item doesn't match session. Expected Id: {SecurityItemId}. Found: {securityItemUser?.Id}.");
|
||||
return false;
|
||||
}
|
||||
if (!SysId.IsValid(affiliateUser?.Id) || (SysId.IsValid(AffiliateId) && !AffiliateId.Equals(affiliateUser.Id)))
|
||||
if (SysId.IsValid(affiliateUser?.Id) && SysId.IsValid(AffiliateId) && SysId.ToLong(AffiliateId) != SysId.ToLong(affiliateUser.Id))
|
||||
{
|
||||
SaLogger.Warn($"{SysUtil.Fn} Invalid - User Affiliate doesn't match session. Expected Id: {AffiliateId}. Found: {affiliateUser?.Id}.");
|
||||
return false;
|
||||
|
||||
@@ -109,7 +109,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers
|
||||
/// </summary>
|
||||
protected override SbmSessionData_Web DeserializeSessionData(String sessionDataJson)
|
||||
{
|
||||
return JsonConvert.DeserializeObject<SbmSessionData_Portal>(sessionDataJson, SbmSessionDataJsonSerializerSettings);
|
||||
return JsonConvert.DeserializeObject<SbmSessionData_Portal>(sessionDataJson, SessionDataJsonDeserializerSettings);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
@@ -180,7 +180,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers
|
||||
}
|
||||
|
||||
// Configure security profile.
|
||||
sessionDataForUser.SecurityProfile_Core.RefreshProfile(internalsForUser.SessionConsole, internalsForUser.SecurityConsole, securityItemUser.Id, internalsForUser.SecurityConsole.GetRegisteredRights());
|
||||
sessionDataForUser.SecurityProfile.RefreshProfile(internalsForUser.SessionConsole, internalsForUser.SecurityConsole, securityItemUser.Id, internalsForUser.SecurityConsole.GetRegisteredRights());
|
||||
|
||||
// 'Keep logged in' can be switched off by the application configuration.
|
||||
keepLoggedIn = App.AppConfig.Security.SignIn.KeepLoggedIn.Allowed && keepLoggedIn;
|
||||
|
||||
@@ -95,8 +95,8 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Assets
|
||||
ViewMode pageMode = GetFilterMode();
|
||||
bool modeIsSearch = pageMode == ViewMode.Search;
|
||||
bool modeIsMaintain = pageMode == ViewMode.Maintain;
|
||||
bool userCanCreateAssetCategories = SessionData_Portal.SecurityProfile_Core.UserCanCreateItemType(Sbm.ItemType.AssetCategory);
|
||||
bool userCanUpdateAssetCategories = SessionData_Portal.SecurityProfile_Core.UserCanUpdateItemType(Sbm.ItemType.AssetCategory);
|
||||
bool userCanCreateAssetCategories = SessionData_Portal.SecurityProfile.UserCanCreateItemType(Sbm.ItemType.AssetCategory);
|
||||
bool userCanUpdateAssetCategories = SessionData_Portal.SecurityProfile.UserCanUpdateItemType(Sbm.ItemType.AssetCategory);
|
||||
|
||||
// Actions.
|
||||
|
||||
@@ -187,8 +187,8 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Assets
|
||||
public void PopulateItemConfig(ItemConfigData config, ItemId assetCategoryId, Sbm.AssetType assetType)
|
||||
{
|
||||
// Session configuration.
|
||||
bool userCanCreateAssetCategories = SessionData_Portal.SecurityProfile_Core.UserCanCreateItemType(Sbm.ItemType.AssetCategory);
|
||||
bool userCanUpdateAssetCategories = SessionData_Portal.SecurityProfile_Core.UserCanUpdateItemType(Sbm.ItemType.AssetCategory);
|
||||
bool userCanCreateAssetCategories = SessionData_Portal.SecurityProfile.UserCanCreateItemType(Sbm.ItemType.AssetCategory);
|
||||
bool userCanUpdateAssetCategories = SessionData_Portal.SecurityProfile.UserCanUpdateItemType(Sbm.ItemType.AssetCategory);
|
||||
|
||||
// Update dialog title.
|
||||
config.Title = Localiser["caption.vehicle.update"];
|
||||
|
||||
@@ -33,13 +33,13 @@ namespace Sarand.BusinessMgr.Web.Portal.Models
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Security profile.
|
||||
public bool UserCanViewFinancials() { return SessionData_Portal.SecurityProfile_Core.UserCanViewFinancials(); }
|
||||
public bool UserCanViewCommodityFinancials_Supply() { return SessionData_Portal.SecurityProfile_Core.UserCanViewFinancials(FinancialType.CommoditySupply); }
|
||||
public bool UserCanViewCommodityFinancials_Sales() { return SessionData_Portal.SecurityProfile_Core.UserCanViewFinancials(FinancialType.CommoditySales); }
|
||||
public bool UserCanUpdateFinancials() { return SessionData_Portal.SecurityProfile_Core.UserCanUpdateFinancials(); }
|
||||
public bool UserCanStockTake() { return SessionData_Portal.SecurityProfile_Core.UserHasSecurityRight(SecurityRight.StockTake); }
|
||||
public bool UserCanCreateItem(Sbm.ItemType itemType) { return SessionData_Portal.SecurityProfile_Core.UserCanCreateItemType(itemType); }
|
||||
public bool UserCanUpdateItem(Sbm.ItemType itemType) { return SessionData_Portal.SecurityProfile_Core.UserCanUpdateItemType(itemType); }
|
||||
public bool UserCanViewFinancials() { return SessionData_Portal.SecurityProfile.UserCanViewFinancials(); }
|
||||
public bool UserCanViewCommodityFinancials_Supply() { return SessionData_Portal.SecurityProfile.UserCanViewFinancials(FinancialType.CommoditySupply); }
|
||||
public bool UserCanViewCommodityFinancials_Sales() { return SessionData_Portal.SecurityProfile.UserCanViewFinancials(FinancialType.CommoditySales); }
|
||||
public bool UserCanUpdateFinancials() { return SessionData_Portal.SecurityProfile.UserCanUpdateFinancials(); }
|
||||
public bool UserCanStockTake() { return SessionData_Portal.SecurityProfile.UserHasSecurityRight(SecurityRight.StockTake); }
|
||||
public bool UserCanCreateItem(Sbm.ItemType itemType) { return SessionData_Portal.SecurityProfile.UserCanCreateItemType(itemType); }
|
||||
public bool UserCanUpdateItem(Sbm.ItemType itemType) { return SessionData_Portal.SecurityProfile.UserCanUpdateItemType(itemType); }
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Page menu options.
|
||||
|
||||
@@ -103,8 +103,8 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Vehicles
|
||||
ViewMode pageMode = GetFilterMode();
|
||||
bool modeIsSearch = pageMode == ViewMode.Search;
|
||||
bool modeIsMaintain = pageMode == ViewMode.Maintain;
|
||||
bool userCanCreateVehicles = SessionData_Portal.SecurityProfile_Core.UserCanCreateItemType(Sbm.ItemType.Vehicle);
|
||||
bool userCanUpdateVehicles = SessionData_Portal.SecurityProfile_Core.UserCanUpdateItemType(Sbm.ItemType.Vehicle);
|
||||
bool userCanCreateVehicles = SessionData_Portal.SecurityProfile.UserCanCreateItemType(Sbm.ItemType.Vehicle);
|
||||
bool userCanUpdateVehicles = SessionData_Portal.SecurityProfile.UserCanUpdateItemType(Sbm.ItemType.Vehicle);
|
||||
|
||||
// Actions.
|
||||
|
||||
@@ -196,8 +196,8 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Vehicles
|
||||
public void PopulateItemConfig(ItemConfigData config, ItemId vehicleItemId)
|
||||
{
|
||||
// Session configuration.
|
||||
bool userCanCreateVehicles = SessionData_Portal.SecurityProfile_Core.UserCanCreateItemType(Sbm.ItemType.Vehicle);
|
||||
bool userCanUpdateVehicles = SessionData_Portal.SecurityProfile_Core.UserCanUpdateItemType(Sbm.ItemType.Vehicle);
|
||||
bool userCanCreateVehicles = SessionData_Portal.SecurityProfile.UserCanCreateItemType(Sbm.ItemType.Vehicle);
|
||||
bool userCanUpdateVehicles = SessionData_Portal.SecurityProfile.UserCanUpdateItemType(Sbm.ItemType.Vehicle);
|
||||
|
||||
// Update dialog title.
|
||||
config.Title = Localiser["caption.vehicle.update"];
|
||||
|
||||
Reference in New Issue
Block a user