137 lines
5.1 KiB
C#
137 lines
5.1 KiB
C#
using Newtonsoft.Json;
|
|
using Sarand.BusinessMgr.Net.Standard.Base.Bus;
|
|
using Sarand.Net.Standard.Base.Bus;
|
|
using Sarand.Net.Standard.Base.Dbas;
|
|
using Sarand.Net.Standard.Base.Helpers;
|
|
using Sarand.Net.Standard.Base.Security;
|
|
using Sarand.Net.Standard.Base.Utils;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using System.Text;
|
|
|
|
namespace Sarand.BusinessMgr.Net.Standard.Base.App
|
|
{
|
|
//=======================================================================
|
|
public abstract class SbmSessionData
|
|
{
|
|
//-------------------------------------------------------------------
|
|
private static long sessionIdxRoot = SacsRandomHelper.GetInt32(1000, 1999);
|
|
|
|
//-------------------------------------------------------------------
|
|
// Construction.
|
|
/// <summary>Protected constructor for deserialisation only.</summary>
|
|
protected SbmSessionData(long sessionIdx, int itemIdx, SbmSessionContext sessionContext)
|
|
{
|
|
SessionIdx = sessionIdx;
|
|
ItemIdx = itemIdx;
|
|
SessionContext = sessionContext;
|
|
userData = CreateUserData(SessionContext, null, null);
|
|
}
|
|
/// <summary>
|
|
/// Primary constructor - on user login.
|
|
/// <para>SessionContext and UserAccount must be supplied.</para>
|
|
/// <para>Roles list is optional.</para>
|
|
/// </summary>
|
|
protected SbmSessionData(SbmSessionContext sessionContext, SaSecurityItem securityItemUser, SbmAffiliate affiliateUser)
|
|
{
|
|
SessionIdx = ++sessionIdxRoot;
|
|
ItemIdx = 1000;
|
|
SessionContext = sessionContext;
|
|
userData = CreateUserData(SessionContext, securityItemUser, affiliateUser);
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Properties.
|
|
// Session and Item indexers.
|
|
public long SessionIdx { get; }
|
|
public int ItemIdx { get; private set; }
|
|
[JsonIgnore]
|
|
public int NextItemIdx { get { return ++ItemIdx; } }
|
|
// Session context.
|
|
public SbmSessionContext SessionContext { get; }
|
|
[JsonIgnore]
|
|
public bool ValidUserSession { get { return SysId.IsValid(User.AffiliateId) && SysId.IsValid(User.AffiliateId); } }
|
|
[JsonIgnore]
|
|
public DbUpdateInfo DbUpdateInfo
|
|
{
|
|
get
|
|
{
|
|
return new DbUpdateInfo(User.AffiliateId, StringUtil.OnEmpty(User.DisplayName, User.EmailAddress), SbmSystem.ComputerName);
|
|
}
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// User.
|
|
public class UserData
|
|
{
|
|
protected UserData() { }
|
|
protected UserData(SbmSessionContext sessionContext, SaSecurityItem securityItemUser, SbmAffiliate affiliateUser)
|
|
{
|
|
if (securityItemUser != null)
|
|
{
|
|
SecurityItemId = securityItemUser.Id;
|
|
}
|
|
if (affiliateUser != null)
|
|
{
|
|
AffiliateId = affiliateUser.Id;
|
|
Refresh(securityItemUser, affiliateUser);
|
|
if (sessionContext.Application == Sbm.Application.WebControl)
|
|
KeepLoggedIn = affiliateUser.KeepLoggedIn_Control;
|
|
else if (sessionContext.Application == Sbm.Application.WebPortal)
|
|
KeepLoggedIn = affiliateUser.KeepLoggedIn_Portal;
|
|
else Debugger.Break();
|
|
}
|
|
}
|
|
protected UserData(UserData userData)
|
|
{
|
|
SecurityItemId = userData.SecurityItemId;
|
|
AffiliateId = userData.AffiliateId;
|
|
Title = userData.Title;
|
|
FirstName = userData.FirstName;
|
|
LastName = userData.LastName;
|
|
DisplayName = userData.DisplayName;
|
|
EmailAddress = userData.EmailAddress;
|
|
KeepLoggedIn = userData.KeepLoggedIn;
|
|
}
|
|
// Properties.
|
|
public SysId SecurityItemId { get; protected set; }
|
|
public SysId AffiliateId { get; protected set; }
|
|
public String Title { get; protected set; }
|
|
public String FirstName { get; protected set; }
|
|
public String LastName { get; protected set; }
|
|
public String DisplayName { get; protected set; }
|
|
public String EmailAddress { get; protected set; }
|
|
public bool KeepLoggedIn { get; protected set; }
|
|
public bool UserAccountSupplied { get; protected set; }
|
|
// Refresh properties.
|
|
protected bool Refresh(SaSecurityItem securityItemUser, SbmAffiliate affiliateUser)
|
|
{
|
|
// Check that user matches the session.
|
|
if (!SysId.IsValid(SecurityItemId) || !SysId.IsValid(securityItemUser?.Id ?? null) || !SecurityItemId.Equals(securityItemUser.Id)) return false;
|
|
if (!SysId.IsValid(AffiliateId) || !SysId.IsValid(affiliateUser?.Id ?? null) || !AffiliateId.Equals(affiliateUser.Id)) return false;
|
|
// Refresh properties.
|
|
EmailAddress = securityItemUser.EmailAddress;
|
|
Title = affiliateUser.Title;
|
|
FirstName = affiliateUser.FirstName;
|
|
LastName = affiliateUser.LastName;
|
|
DisplayName = affiliateUser.GetDisplayName();
|
|
return true;
|
|
}
|
|
}
|
|
protected abstract UserData CreateUserData(SbmSessionContext sessionContext, SaSecurityItem securityItemUser, SbmAffiliate affiliateUser);
|
|
private UserData userData;
|
|
public UserData User { get { return userData; } }
|
|
/// <summary>User - JSON deserialisation route.</summary>
|
|
protected void SetUser(UserData user)
|
|
{
|
|
if (this.userData != null && User.UserAccountSupplied)
|
|
throw new NotSupportedException("Session User cannot be replaced.");
|
|
this.userData = user;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
}
|
|
//=======================================================================
|
|
}
|