Files
Saxonite/SaxoniteStandardBase/Base/App/SaxSessionData.cs
T
andy 7b0a710b13 v1.0.5.3
Activity index, Db schema validation.
2021-05-31 20:27:40 +01:00

129 lines
4.4 KiB
C#

using Newtonsoft.Json;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Net.Standard.Base.Bus;
using Saxonite.Net.Standard.Base.App;
using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
using Sarand.Net.Standard.Base.Utils;
using Newtonsoft.Json.Converters;
namespace Saxonite.Net.Standard.Base.App
{
//=======================================================================
public class SaxSessionData
{
//-------------------------------------------------------------------
// Protected construction.
protected SaxSessionData()
{
}
//-------------------------------------------------------------------
// Construction.
/// <summary>Hidden constructor for deserialisation only.</summary>
private SaxSessionData(SaxSessionContext sessionContext)
{
SessionContext = sessionContext;
User = new UserData(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 SaxSessionData(SaxSessionContext sessionContext, SaxUserAccount userAccount, List<SaxUserRole> userRoles)
{
SessionContext = sessionContext;
User = new UserData(SessionContext, userAccount, userRoles);
}
//-------------------------------------------------------------------
// Properties.
public SaxSessionContext SessionContext { get; }
[JsonIgnore]
public bool ValidUserSession { get { return SysId.IsValid(User.UserAccountId) && SysId.IsValid(User.UserAccountId); } }
[JsonIgnore]
public DbUpdateInfo DbUpdateInfo
{
get
{
return new DbUpdateInfo(User.UserAccountId, StringUtil.OnEmpty(User.DisplayName, User.EmailAddress), SaxSystem.ComputerName);
}
}
//-------------------------------------------------------------------
// User.
public class UserData
{
protected UserData() { }
public UserData(SaxSessionContext sessionContext, SaxUserAccount userAccount, List<SaxUserRole> userRoles)
{
if (userAccount != null)
{
UserAccountId = userAccount.Id;
FirstName = userAccount.FirstName;
LastName = userAccount.LastName;
DisplayName = userAccount.GetDisplayName();
EmailAddress = userAccount.EmailAddress;
RegionIdCountry = userAccount.RegionIdCountry;
RegionIdProvince = userAccount.RegionIdProvince;
if (sessionContext.Application == Sax.Application.Admin)
KeepLoggedIn = userAccount.KeepLoggedIn_Admin;
else if (sessionContext.Application == Sax.Application.Online)
KeepLoggedIn = userAccount.KeepLoggedIn_Online;
else Debugger.Break();
if (userRoles != null)
{
foreach (SaxUserRole userRole in userRoles.FindAll(item => item.IsStatusActive))
roles.Add(new RoleData(userRole));
}
}
}
public SysId UserAccountId { 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 SysId RegionIdCountry { get; protected set; }
public SysId RegionIdProvince { get; protected set; }
public bool KeepLoggedIn { get; protected set; }
public bool UserAccountSupplied { get; protected set; }
// Roles.
public class RoleData
{
public RoleData(SaxUserRole userRole)
{
if (userRole != null)
{
Role = userRole.UserRole;
Status = userRole.Status;
}
}
public Sax.UserRole Role { get; protected set; }
public SaStatus Status { get; protected set; }
}
[JsonIgnore]
private readonly List<RoleData> roles = new List<RoleData>();
public List<RoleData> Roles { get { return new List<RoleData>(roles); } protected set { roles.Clear(); roles.AddRange(value); } }
[JsonIgnore]
public bool IsJournalist { get { return roles?.Exists(item => item.Role == Sax.UserRole.Journalist) ?? false; } }
}
public UserData User { get; private set; }
/// <summary>User - JSON deserialisation route.</summary>
protected void SetUser(UserData user)
{
if (User != null && User.UserAccountSupplied)
throw new NotSupportedException("Session User cannot be replaced.");
User = user;
}
//-------------------------------------------------------------------
}
//=======================================================================
}