This commit is contained in:
2022-03-07 12:22:53 +00:00
parent 362aa31e15
commit 7271b54fba
39 changed files with 356 additions and 90 deletions
@@ -28,7 +28,8 @@ namespace Saxonite.Net.Core.Web.Admin.Consoles
public override SaxDataCacheConsole GetDataCacheConsole(SaxSessionContext sessionContext)
{
String fn = GetType().Name + ".GetDataCacheConsole";
throw new NotSupportedException(fn + " Data Cache Console not supported in Admin app.");
//throw new NotSupportedException(fn + " Data Cache Console not supported in Admin app.");
return null;
}
//-------------------------------------------------------------------
@@ -70,14 +70,21 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
// 'Keep logged in' can be switched off by the application configuration.
keepLoggedIn = App.AppConfig.Security.SignIn.KeepLoggedIn.Allowed && keepLoggedIn;
// Log user in.
userAccount.KeepLoggedIn_Admin = keepLoggedIn;
userAccount.LastLoginAt = DateTime.Now;
userAccount.InvalidLoginCount = 0;
userAccount.LastInvalidLoginAt = DateTime.MinValue;
if (!AccountMgr.UpdateUserAccount(userAccount, DbUpdateInfo))
// Log user in - Admin details stored against System Admin role.
SaxUserRole userRole = userRoles.Find(item => item.UserRole == Sax.UserRole.SystemAdmin);
if (userRole == null)
{
SaLogger.Warn(fn + " Failed to update account for " + userAccount.EmailAddress + ": " + AccountMgr.ErrorStateMessage);
SaLogger.Warn(fn + " System Admin role not found for " + userAccount.EmailAddress);
errorMessage = Localiser["security.msg.signin.invalid"];
return false;
}
userRole.KeepLoggedIn = keepLoggedIn;
userRole.LastLoginAt = DateTime.Now;
userRole.InvalidLoginCount = 0;
userRole.LastInvalidLoginAt = DateTime.MinValue;
if (!AccountMgr.UpdateUserRole(userRole, DbUpdateInfo))
{
SaLogger.Warn(fn + " Failed to update Admin user role for " + userAccount.EmailAddress + ": " + AccountMgr.ErrorStateMessage);
errorMessage = Localiser["security.msg.signin.invalid"];
return false;
}
@@ -87,7 +94,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
OpenUserSession(SessionContext, userAccount, userRoles);
// Send the 'Keep Logged In' cookie if requested.
if (userAccount.KeepLoggedIn_Admin)
if (userRole.KeepLoggedIn)
SetKeepLoggedInCookie();
return true;
@@ -30,7 +30,8 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
public String RegionNameProvince { get; set; }
public int UserRoleCount { get; set; }
public bool? SystemAdmin { get; set; } = null;
public String LastLoginAt { get; set; }
public String LastOnlineLoginAt { get; set; }
public String LastAdminLoginAt { get; set; }
}
private class UserData_Full : UserData_List
{
@@ -50,9 +51,13 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
data.RegionNameProvince = model.GetRegionName(user.RegionIdProvince);
data.UserRoleCount = userRoles?.GetUserRolesByStatus(SaStatus.Active).Count ?? 0;
data.SystemAdmin = (userRoles != null && userRoles.Exists(item => item.UserRole == Sax.UserRole.SystemAdmin) ? true : (bool?)null);
data.LastLoginAt = model.FormatDateTimeForDisplay(user.LastLoginAt);
data.LastOnlineLoginAt = model.FormatDateTimeForDisplay(user.LastLoginAt);
data.StatusCode = user.StatusCode;
data.StatusDesc = user.StatusDesc;
// System Admin role.
SaxUserRole userRole_SystemAdmin = userRoles.Find(item => item.UserRole == Sax.UserRole.SystemAdmin);
if (userRole_SystemAdmin != null)
data.LastAdminLoginAt = model.FormatDateTimeForDisplay(userRole_SystemAdmin.LastLoginAt);
}
private void PopulateUserResponseData(SaxModel_Admin model, UserData_Full data, SaxUserAccount user, List<SaxUserRole> userRoles)
{
@@ -138,13 +143,14 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
ColumnDfn colUserRoleCount = AccountMgr.GetUserAccountColumnDfn(SaxUserAccount.Column.UserRoleCount);
ColumnDfn colSystemAdminUser = AccountMgr.GetUserAccountColumnDfn(SaxUserAccount.Column.SystemAdminUser);
ColumnDfn colLastLogin = AccountMgr.GetUserAccountColumnDfn(SaxUserAccount.Column.LastLoginAt);
ColumnDfn colAdminLastLogin = AccountMgr.GetUserAccountColumnDfn(SaxUserAccount.Column.LastAdminLoginAt);
ColumnDfn colStatus = AccountMgr.GetUserAccountColumnDfn(SaxUserAccount.Column.Status);
List<ColumnDfn> columns = new List<ColumnDfn>()
{
colId, colEmail, colTitle, colFirstName, colLastName,
colCountryName, colProvinceName,
colUserRoleCount, colSystemAdminUser,
colLastLogin, colStatus
colLastLogin, colAdminLastLogin, colStatus
};
// Query items.
@@ -164,7 +170,8 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
RegionNameProvince = values.GetString(colProvinceName.DataName),
UserRoleCount = StringUtil.ToInt(values.GetString(colUserRoleCount.DataName)),
SystemAdmin = StringUtil.ToBool(values.GetString(colSystemAdminUser.DataName)),
LastLoginAt = model.FormatDateTimeForDisplay(values.GetDateTime(colLastLogin.DataName)),
LastOnlineLoginAt = model.FormatDateTimeForDisplay(values.GetDateTime(colLastLogin.DataName)),
LastAdminLoginAt = model.FormatDateTimeForDisplay(values.GetDateTime(colAdminLastLogin.DataName)),
StatusCode = values.GetString(colStatus.DataName),
StatusDesc = SacsSystem.GetStatusDescForCode(values.GetString(colStatus.DataName))
};
+5 -4
View File
@@ -134,12 +134,13 @@
<div class="sax-content">
<div class="row">
<div class="col-sm-4"><span class="UserDisplayName"></span></div>
<div class="col-sm-4"><div class="UserLastLogin">Last login: <span class="UserLastLoginAt"></span></div></div>
<div class="col-sm-4 center"><div class="sax-note UserLastOnlineLogin">Online:&nbsp;<span class="UserLastOnlineLoginAt"></span></div></div>
<div class="col-sm-4 right"><span class="UserRegionNameCountry"></span></div>
</div>
<div class="row">
<div class="col-sm-4"><div class="UserRoles">Roles: <span class="UserRoleCount"></span></div></div>
<div class="col-sm-4"><div class=""></div></div>
<div class="col-sm-4 right"><div class="StatusDesc"></div></div>
<div class="col-sm-4"><div class="sax-note UserRoles">Roles: <span class="UserRoleCount"></span></div></div>
<div class="col-sm-4 center"><div class="sax-note UserLastAdminLogin">Admin:&nbsp;<span class="UserLastAdminLoginAt"></span></div></div>
<div class="col-sm-4 right"><div class="sax-note StatusDesc"></div></div>
</div>
</div>
</div>
@@ -280,8 +280,8 @@
.sax-panel-item > .sax-content
{
margin: 4px 8px;
padding: 4px 4px;
margin: 4px 8px 2px 8px;
padding: 2px 2px;
}
.sax-panel-item .sax-note
+4 -4
View File
@@ -109,7 +109,7 @@
}
op.showSelectFilterSport = function ()
{
sax.data.selectItem.fn.selectItem({ caption: sax.dlg.title.selectSport, items: op.data.sports, fnCallback: op.onFilterSportSelected });
sax.data.selectItem.fn.selectItem({ caption: sax.dlg.title.selectSport, itemId: $('.FilterOrganisationSportId', $frm.filter).val(), items: op.data.sports, fnCallback: op.onFilterSportSelected });
}
op.onFilterSportSelected = function (spt)
{
@@ -144,7 +144,7 @@
}
op.showSelectOrgSport = function ()
{
sax.data.selectItem.fn.selectItem({ caption: sax.dlg.title.selectSport, items: op.data.sports, fnCallback: op.onOrgSportSelected });
sax.data.selectItem.fn.selectItem({ caption: sax.dlg.title.selectSport, itemId: $('.OrganisationSportId', $frm.org).val(), items: op.data.sports, fnCallback: op.onOrgSportSelected });
}
op.onOrgSportSelected = function (spt)
{
@@ -167,7 +167,7 @@
}
op.showSelectFilterRegion = function ()
{
sax.data.selectItem.fn.selectItem({ caption: sax.dlg.title.selectFilterRegion, items: op.data.regions, fnCallback: op.onFilterRegionSelected });
sax.data.selectItem.fn.selectItem({ caption: sax.dlg.title.selectFilterRegion, itemId: $('.FilterOrganisationRegionId', $frm.filter).val(), items: op.data.regions, fnCallback: op.onFilterRegionSelected });
}
op.onFilterRegionSelected = function (rgn)
{
@@ -203,7 +203,7 @@
}
op.showSelectOrgRegion = function ()
{
sax.data.selectItem.fn.selectItem({ caption: sax.dlg.title.selectRegion, items: op.data.regions, fnCallback: op.onOrgRegionSelected });
sax.data.selectItem.fn.selectItem({ caption: sax.dlg.title.selectRegion, itemId: $('.OrganisationRegionIdCountry', $frm.org).val(), items: op.data.regions, fnCallback: op.onOrgRegionSelected });
}
op.onOrgRegionSelected = function (rgn)
{
+8 -6
View File
@@ -65,8 +65,10 @@
$('.UserRegionNameProvince', $item).text(item.regionNameProvince);
$('.UserRoleCount', $item).text(item.userRoleCount);
$('.UserRoles', $item).toggle(!!item.userRoleCount);
$('.UserLastLoginAt', $item).text(item.lastLoginAt);
$('.UserLastLogin', $item).toggle(!!item.lastLoginAt);
$('.UserLastOnlineLoginAt', $item).text(item.lastOnlineLoginAt);
$('.UserLastOnlineLogin', $item).toggle(!!item.lastOnlineLoginAt);
$('.UserLastAdminLoginAt', $item).text(item.lastAdminLoginAt);
$('.UserLastAdminLogin', $item).toggle(!!item.lastAdminLoginAt);
$('.StatusDesc', $item).text(item.statusDesc).addClass('sax-status-' + item.statusCode.toLowerCase());
$('.sax-caption .sax-action').toggleClass('sax-action', !item.deleted);
let $mnu = $('ul.sax-dropdown-menu', $item);
@@ -129,7 +131,7 @@
}
sax.showSelectFilterSport = function ()
{
sax.data.selectItem.fn.selectItem({ caption: sax.dlg.title.selectSport, items: sax.data.sports, fnCallback: sax.onFilterSportSelected });
sax.data.selectItem.fn.selectItem({ caption: sax.dlg.title.selectSport, itemId: $('.FilterUserSportId', $frm.filter).val(), items: sax.data.sports, fnCallback: sax.onFilterSportSelected });
}
sax.onFilterSportSelected = function (spt)
{
@@ -171,7 +173,7 @@
}
sax.showSelectFilterRegion = function ()
{
sax.data.selectItem.fn.selectItem({ caption: sax.dlg.title.selectFilterRegion, items: sax.data.regions, fnCallback: sax.onFilterRegionSelected });
sax.data.selectItem.fn.selectItem({ caption: sax.dlg.title.selectFilterRegion, itemId: $('.FilterUserRegionId', $frm.filter).val(), items: sax.data.regions, fnCallback: sax.onFilterRegionSelected });
}
sax.onFilterRegionSelected = function (rgn)
{
@@ -193,7 +195,7 @@
}
sax.showSelectRegionCountry = function ()
{
sax.data.selectItem.fn.selectItem({ caption: sax.dlg.title.selectRegionCountry, items: sax.data.regions, fnCallback: sax.onRegionCountrySelected });
sax.data.selectItem.fn.selectItem({ caption: sax.dlg.title.selectRegionCountry, itemId: $('.UserRegionIdCountry', $frm.user).val(), items: sax.data.regions, fnCallback: sax.onRegionCountrySelected });
}
sax.onRegionCountrySelected = function (rgn)
{
@@ -215,7 +217,7 @@
}
sax.showSelectRegionProvince = function ()
{
sax.data.selectItem.fn.selectItem({ caption: sax.dlg.title.selectRegionProvince, items: sax.data.regions, fnCallback: sax.onRegionProvinceSelected });
sax.data.selectItem.fn.selectItem({ caption: sax.dlg.title.selectRegionProvince, itemId: $('.UserRegionIdProvince', $frm.user).val(), items: sax.data.regions, fnCallback: sax.onRegionProvinceSelected });
}
sax.onRegionProvinceSelected = function (rgn)
{
@@ -74,7 +74,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
keepLoggedIn = App.AppConfig.Security.SignIn.KeepLoggedIn.Allowed && keepLoggedIn;
// Log user in.
userAccount.KeepLoggedIn_Online = keepLoggedIn;
userAccount.KeepLoggedIn = keepLoggedIn;
userAccount.LastLoginAt = DateTime.Now;
userAccount.InvalidLoginCount = 0;
userAccount.LastInvalidLoginAt = DateTime.MinValue;
@@ -91,7 +91,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
RefreshSessionProfileSports();
// Send the 'Keep Logged In' cookie if requested.
if (userAccount.KeepLoggedIn_Online)
if (userAccount.KeepLoggedIn)
SetKeepLoggedInCookie();
return true;
@@ -12,7 +12,7 @@
<div class="sax-content">
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmChangePassword", @class = "sax-form" }))
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmChangePassword", @class = "sax-form", @onsubmit = "return false;" }))
{
@if (!Model.RequestPasswordMode)
@@ -11,7 +11,7 @@
<div class="sax-content">
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmRequestPassword", @class = "sax-form" }))
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmRequestPassword", @class = "sax-form", @onsubmit = "return false;" }))
{
<div class="spacer4"></div>
@@ -12,7 +12,7 @@
<div class="sax-content">
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmSignIn", @class = "sax-form" }))
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmSignIn", @class = "sax-form", @onsubmit = "return false;" }))
{
<div class="spacer4"></div>
@@ -46,7 +46,6 @@
<div class="row">
<div class="col-6">
@Html.CheckBoxFor(model => model.KeepMeSignedIn, new { @id = "chkKeepMeSignedIn" })
&nbsp;
<span class="sax-label pointer" onclick="$('#chkKeepMeSignedIn').click()">@Localiser["label.keep.signed.in"]</span>
</div>
<div class="col-6 right">
@@ -71,16 +71,19 @@
//--------------------------------------------------------------
$(function ()
{
sax.$frm.signIn = $('#frmSignIn');
$(':input:enabled:visible:first').focus();
$('#ifEmailAddress,#ifPasswordCurrent,#ifPassword,#ifPasswordConfirm').on('input', function () { sax.clearControlError(this); });
$('#frmChangePassword #ifPassword').on('keyup', sax.doScorePassword);
sax.$prgPasswordStrength = $('#frmChangePassword #prgPasswordStrength').progressbar({ 'max': 5 });
$('#ifEmailAddress,#ifPassword', $('#frmSignIn')).on('keypress', function (e) { if (e.which == 13) sax.doSignin(); });
$('#frmSignIn #pbSignIn').on('click', function () { sax.doSignin(); });
$('#ifPasswordCurrent,#ifPassword,#ifPasswordConfirm', $('#frmChangePassword')).on('keypress', function (e) { if (e.which == 13) sax.doChangePassword(); });
$('#frmChangePassword #pbChangePassword').on('click', function () { sax.doChangePassword(); });
$('#ifEmailAddress', $('#frmRequestPassword')).on('keypress', function (e) { if (e.which == 13) sax.doRequestPassword(); });
$('#frmRequestPassword #pbRequestPassword').on('click', function () { sax.doRequestPassword(); });
sax.$frm.signIn.on('keypress', '#ifEmailAddress,#ifPassword,#chkKeepMeSignedIn', function (e) { if (e.which == 13 && $('#ifEmailAddress', sax.$frm.signIn).val() && $('#ifPassword', sax.$frm.signIn).val()) sax.doSignin(); });
sax.$frm.signIn.on('click', '#pbSignIn', function () { sax.doSignin(); }).on('keypress', '#pbSignIn', function (e) { if (e.which == 13) sax.doSignin(); });
sax.$frm.changePassword = $('#frmChangePassword');
sax.$frm.changePassword.on('keypress', '#ifPasswordCurrent,#ifPassword,#ifPasswordConfirm', function (e) { if (e.which == 13) sax.doChangePassword(); });
sax.$frm.changePassword.on('keyup', '#ifPassword', sax.doScorePassword);
sax.$prgPasswordStrength = $('#prgPasswordStrength', sax.$frm.changePassword).progressbar({ 'max': 5 });
sax.$frm.changePassword.on('click', '#pbChangePassword', function () { sax.doChangePassword(); }).on('keypress', '#pbChangePassword', function (e) { if (e.which == 13) sax.doChangePassword(); });
sax.$frm.reqPword = $('#frmRequestPassword');
sax.$frm.reqPword.on('keypress', '#ifEmailAddress', function (e) { if (e.which == 13) sax.doRequestPassword(); });
sax.$frm.reqPword.on('click', '#pbRequestPassword', function () { sax.doRequestPassword(); });
});
}(window, window.document));
+1 -1
View File
@@ -18,7 +18,7 @@ namespace Saxonite.Net.Standard.Base.App
//-------------------------------------------------------------------
public static class Version
{
private static String version { get; } = "1.2.4.1";
private static String version { get; } = "1.2.4.2";
// Retrieve version.
public static String GetFullVersion () { return version; }
public static String GetAppVersion ()
@@ -6,7 +6,7 @@ using System.Collections.Generic;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Fri 4-Mar-2022 15:28:05
// Code generated by Sarand Database Utilities Mon 7-Mar-2022 10:06:56
//---------------------------------------------------------------------------
namespace Saxonite.Base.App
{
@@ -306,6 +306,9 @@ namespace Saxonite.Base.App
UserRole_Id,
UserRole_UserAccountId,
UserRole_UserRoleCode,
UserRole_LastLoginAt,
UserRole_LastInvalidLoginAt,
UserRole_InvalidLoginCount,
UserRole_Notes,
UserRole_Flags,
UserRole_Status,
@@ -365,7 +368,7 @@ namespace Saxonite.Base.App
//-------------------------------------------------------------------
// Data members.
private static readonly int tableCount = 18;
private static readonly int columnCount = 318;
private static readonly int columnCount = 321;
private static ulong maxTextLen = 0;
//-------------------------------------------------------------------
@@ -819,6 +822,9 @@ namespace Saxonite.Base.App
new ColumnDfn(15,"Id",5,-5,true,19),
new ColumnDfn(15,"UserAccountId",4,4,false,10),
new ColumnDfn(15,"UserRoleCode",0,12,false,16),
new ColumnDfn(15,"LastLoginAt",9,93,false,16),
new ColumnDfn(15,"LastInvalidLoginAt",9,93,false,16),
new ColumnDfn(15,"InvalidLoginCount",3,5,false,5),
new ColumnDfn(15,"Notes",0,-9,false,2000),
new ColumnDfn(15,"Flags",3,5,false,5),
new ColumnDfn(15,"Status",0,12,false,3),
@@ -75,9 +75,15 @@ namespace Saxonite.Net.Standard.Base.App
UserAccountId = userAccount.Id;
RefreshUserData(userAccount);
if (sessionContext.Application == Sax.Application.Admin)
KeepLoggedIn = userAccount.KeepLoggedIn_Admin;
{
// Admin 'Keep logged in' recorded against System Admin user role.
SaxUserRole userRole = userRoles.Find(item => item.UserRole == Sax.UserRole.SystemAdmin);
if (userRole != null)
KeepLoggedIn = userRole.KeepLoggedIn;
}
else if (sessionContext.Application == Sax.Application.Online)
KeepLoggedIn = userAccount.KeepLoggedIn_Online;
// Online 'Keep logged in' recorded against System Admin user role.
KeepLoggedIn = userAccount.KeepLoggedIn;
else Debugger.Break();
if (userRoles != null)
@@ -48,6 +48,11 @@ namespace Saxonite.Net.Standard.Base.Bus
// Associated data.
UserRoleCount,
SystemAdminUser,
LastAdminLoginOn,
LastAdminLoginAt,
LastInvalidAdminLoginOn,
LastInvalidAdminLoginAt,
InvalidAdminLoginCount,
// Common.
Notes,
Flags,
@@ -453,17 +458,11 @@ namespace Saxonite.Net.Standard.Base.Bus
//-------------------------------------------------------------------
// Flags - positions 1-16 available.
public Byte Flag_KeepLoggedIn_Admin { get; } = 0x1;
public Byte Flag_KeepLoggedIn_Online { get; } = 0x2;
public bool KeepLoggedIn_Admin
public Byte Flag_KeepLoggedIn { get; } = 0x1;
public bool KeepLoggedIn
{
get { return GetFlag(Flag_KeepLoggedIn_Admin); }
set { SetFlag(Flag_KeepLoggedIn_Admin, value); }
}
public bool KeepLoggedIn_Online
{
get { return GetFlag(Flag_KeepLoggedIn_Online); }
set { SetFlag(Flag_KeepLoggedIn_Online, value); }
get { return GetFlag(Flag_KeepLoggedIn); }
set { SetFlag(Flag_KeepLoggedIn, value); }
}
//-------------------------------------------------------------------
@@ -21,6 +21,12 @@ namespace Saxonite.Net.Standard.Base.Bus
UserAccountId,
UserRole,
UserRole_Desc,
// Login - Admin for System user.
LastLoginOn,
LastLoginAt,
LastInvalidLoginOn,
LastInvalidLoginAt,
InvalidLoginCount,
// User.
User_EmailAddress,
User_DisplayName,
@@ -44,6 +50,10 @@ namespace Saxonite.Net.Standard.Base.Bus
{
public SysId UserAccountId { get; set; }
public Sax.UserRole UserRole { get; set; }
// Login.
public DateTime LastLoginAt { get; set; } = DateTime.MinValue;
public DateTime LastInvalidLoginAt { get; set; } = DateTime.MinValue;
public short InvalidLoginCount { get; set; }
}
//-------------------------------------------------------------------
@@ -68,11 +78,31 @@ namespace Saxonite.Net.Standard.Base.Bus
get { return data.UserRole; }
set { CheckChanged((int)data.UserRole, (int)value); data.UserRole = value; }
}
// Login.
public DateTime LastLoginAt
{
get { return data.LastLoginAt; }
set { CheckChanged(data.LastLoginAt, value); data.LastLoginAt = value; }
}
public DateTime LastInvalidLoginAt
{
get { return data.LastInvalidLoginAt; }
set { CheckChanged(data.LastInvalidLoginAt, value); data.LastInvalidLoginAt = value; }
}
public short InvalidLoginCount
{
get { return data.InvalidLoginCount; }
set { CheckChanged(data.InvalidLoginCount, value); data.InvalidLoginCount = value; }
}
// Population.
internal void PopulateFrom(Data data)
{
UserAccountId = data.UserAccountId;
UserRole = data.UserRole;
// Login.
LastLoginAt = data.LastLoginAt;
LastInvalidLoginAt = data.LastInvalidLoginAt;
InvalidLoginCount = data.InvalidLoginCount;
base.PopulateFrom(data);
}
public Data Clone()
@@ -90,6 +120,10 @@ namespace Saxonite.Net.Standard.Base.Bus
// Identifies the field that has invalid data.
public ValidValue UserAccountId { get; set; } = ValidValue.Valid;
public ValidValue UserRole { get; set; } = ValidValue.Valid;
// Login.
public ValidValue LastLogin { get; set; } = ValidValue.Valid;
public ValidValue LastInvalidLogin { get; set; } = ValidValue.Valid;
public ValidValue InvalidLoginCount { get; set; } = ValidValue.Valid;
}
//-------------------------------------------------------------------
@@ -164,8 +198,32 @@ namespace Saxonite.Net.Standard.Base.Bus
protected set { data.UserRole = value; }
}
// Login - Admin application for System Admin role.
public DateTime LastLoginAt
{
get { return data.LastLoginAt; }
set { data.LastLoginAt = value; }
}
public DateTime LastInvalidLoginAt
{
get { return data.LastInvalidLoginAt; }
set { data.LastInvalidLoginAt = value; }
}
public short InvalidLoginCount
{
get { return data.InvalidLoginCount; }
set { data.InvalidLoginCount = value; }
}
//-------------------------------------------------------------------
// Flags - positions 1-16 available.
// Keep logged in - Admin application for System Admin role.
public Byte Flag_KeepLoggedIn { get; } = 0x1;
public bool KeepLoggedIn
{
get { return GetFlag(Flag_KeepLoggedIn); }
set { SetFlag(Flag_KeepLoggedIn, value); }
}
//-------------------------------------------------------------------
// A s s o c i a t e d D a t a
@@ -2,6 +2,7 @@
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Utils;
using Saxonite.Base.App;
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Bus;
@@ -91,6 +92,32 @@ namespace Saxonite.Net.Standard.Base.Mgr
return SetErrorState("User Role must be specified");
}
// Login - Admin application for System users.
if (errField.LastLogin != SacsHierarchyItem.ValidValue.Ignore && DateUtil.IsValid(data.LastLoginAt))
{
if (data.UserRole != Sax.UserRole.SystemAdmin)
{
errField.LastLogin = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Last Login can only be set for System Admin role");
}
}
if (errField.LastInvalidLogin != SacsHierarchyItem.ValidValue.Ignore && DateUtil.IsValid(data.LastInvalidLoginAt))
{
if (data.UserRole != Sax.UserRole.SystemAdmin)
{
errField.LastLogin = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Last Invalid Login can only be set for System Admin role");
}
}
if (errField.InvalidLoginCount != SacsHierarchyItem.ValidValue.Ignore && data.InvalidLoginCount > 0)
{
if (data.UserRole != Sax.UserRole.SystemAdmin)
{
errField.LastLogin = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Invalid Login Count can only be set for System Admin role");
}
}
//---------------------------------------------------------------
// Common properties.
if (errField.Notes != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Notes, "notes", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.UserRole_Notes)))
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Fri 4-Mar-2022 15:28:05
// Code generated by Sarand Database Utilities Mon 7-Mar-2022 10:06:56
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal
{
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Fri 4-Mar-2022 15:28:05
// Code generated by Sarand Database Utilities Mon 7-Mar-2022 10:06:56
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal
{
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Fri 4-Mar-2022 15:28:05
// Code generated by Sarand Database Utilities Mon 7-Mar-2022 10:06:56
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal
{
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Fri 4-Mar-2022 15:28:05
// Code generated by Sarand Database Utilities Mon 7-Mar-2022 10:06:56
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal
{
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Fri 4-Mar-2022 15:28:05
// Code generated by Sarand Database Utilities Mon 7-Mar-2022 10:06:56
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal
{
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Fri 4-Mar-2022 15:28:05
// Code generated by Sarand Database Utilities Mon 7-Mar-2022 10:06:56
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal
{
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Fri 4-Mar-2022 15:28:05
// Code generated by Sarand Database Utilities Mon 7-Mar-2022 10:06:56
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal
{
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Fri 4-Mar-2022 15:28:05
// Code generated by Sarand Database Utilities Mon 7-Mar-2022 10:06:56
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal
{
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Fri 4-Mar-2022 15:28:05
// Code generated by Sarand Database Utilities Mon 7-Mar-2022 10:06:56
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal
{
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Fri 4-Mar-2022 15:28:05
// Code generated by Sarand Database Utilities Mon 7-Mar-2022 10:06:56
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal
{
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Fri 4-Mar-2022 15:28:05
// Code generated by Sarand Database Utilities Mon 7-Mar-2022 10:06:56
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal
{
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Fri 4-Mar-2022 15:28:05
// Code generated by Sarand Database Utilities Mon 7-Mar-2022 10:06:56
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal
{
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Fri 4-Mar-2022 15:28:05
// Code generated by Sarand Database Utilities Mon 7-Mar-2022 10:06:56
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal
{
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Fri 4-Mar-2022 15:28:05
// Code generated by Sarand Database Utilities Mon 7-Mar-2022 10:06:56
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal
{
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Fri 4-Mar-2022 15:28:05
// Code generated by Sarand Database Utilities Mon 7-Mar-2022 10:06:56
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal
{
@@ -22,6 +22,9 @@ namespace Saxonite.Net.Standard.Dbas.Internal
public ColumnDataInt64 _Id { get; } = new ColumnDataInt64("Id", true);
public ColumnDataInt32 _UserAccountId { get; } = new ColumnDataInt32("UserAccountId");
public ColumnDataString _UserRoleCode { get; } = new ColumnDataString("UserRoleCode");
public ColumnDataDateTime _LastLoginAt { get; } = new ColumnDataDateTime("LastLoginAt");
public ColumnDataDateTime _LastInvalidLoginAt { get; } = new ColumnDataDateTime("LastInvalidLoginAt");
public ColumnDataInt16 _InvalidLoginCount { get; } = new ColumnDataInt16("InvalidLoginCount");
public ColumnDataString _Notes { get; } = new ColumnDataString("Notes");
public ColumnDataInt16 _Flags { get; } = new ColumnDataInt16("Flags");
public ColumnDataString _Status { get; } = new ColumnDataString("Status");
@@ -40,6 +43,9 @@ namespace Saxonite.Net.Standard.Dbas.Internal
"Id",
"UserAccountId",
"UserRoleCode",
"LastLoginAt",
"LastInvalidLoginAt",
"InvalidLoginCount",
"Notes",
"Flags",
"Status",
@@ -84,6 +90,9 @@ namespace Saxonite.Net.Standard.Dbas.Internal
public Int64 _Id { get { return Cols._Id.Value; } set { Cols._Id.Value = value; } }
public Int32 _UserAccountId { get { return Cols._UserAccountId.Value; } set { Cols._UserAccountId.Value = value; } }
public String _UserRoleCode { get { return Cols._UserRoleCode.Value; } set { Cols._UserRoleCode.Value = value; } }
public DateTime _LastLoginAt { get { return Cols._LastLoginAt.Value; } set { Cols._LastLoginAt.Value = value; } }
public DateTime _LastInvalidLoginAt { get { return Cols._LastInvalidLoginAt.Value; } set { Cols._LastInvalidLoginAt.Value = value; } }
public Int16 _InvalidLoginCount { get { return Cols._InvalidLoginCount.Value; } set { Cols._InvalidLoginCount.Value = value; } }
public String _Notes { get { return Cols._Notes.Value; } set { Cols._Notes.Value = value; } }
public Int16 _Flags { get { return Cols._Flags.Value; } set { Cols._Flags.Value = value; } }
public String _Status { get { return Cols._Status.Value; } set { Cols._Status.Value = value; } }
@@ -117,6 +126,9 @@ namespace Saxonite.Net.Standard.Dbas.Internal
_Id = GetFieldInt64(dbDataReader, "Id", _Id);
_UserAccountId = GetFieldInt32(dbDataReader, "UserAccountId", _UserAccountId);
_UserRoleCode = GetFieldString(dbDataReader, "UserRoleCode", _UserRoleCode);
_LastLoginAt = GetFieldDateTime(dbDataReader, "LastLoginAt", _LastLoginAt);
_LastInvalidLoginAt = GetFieldDateTime(dbDataReader, "LastInvalidLoginAt", _LastInvalidLoginAt);
_InvalidLoginCount = GetFieldInt16(dbDataReader, "InvalidLoginCount", _InvalidLoginCount);
_Notes = GetFieldString(dbDataReader, "Notes", _Notes);
_Flags = GetFieldInt16(dbDataReader, "Flags", _Flags);
_Status = GetFieldString(dbDataReader, "Status", _Status);
@@ -149,6 +161,9 @@ namespace Saxonite.Net.Standard.Dbas.Internal
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("UserAccountId")) AddCommandParameter(dbCommand, "@UserAccountId", _UserAccountId);
if (columnNames.ContainsCI("UserRoleCode")) AddCommandParameter(dbCommand, "@UserRoleCode", _UserRoleCode);
if (columnNames.ContainsCI("LastLoginAt")) AddCommandParameter(dbCommand, "@LastLoginAt", _LastLoginAt);
if (columnNames.ContainsCI("LastInvalidLoginAt")) AddCommandParameter(dbCommand, "@LastInvalidLoginAt", _LastInvalidLoginAt);
if (columnNames.ContainsCI("InvalidLoginCount")) AddCommandParameter(dbCommand, "@InvalidLoginCount", _InvalidLoginCount);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
@@ -196,6 +211,9 @@ namespace Saxonite.Net.Standard.Dbas.Internal
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("UserAccountId")) AddCommandParameter(dbCommand, "@UserAccountId", _UserAccountId);
if (columnNames.ContainsCI("UserRoleCode")) AddCommandParameter(dbCommand, "@UserRoleCode", _UserRoleCode);
if (columnNames.ContainsCI("LastLoginAt")) AddCommandParameter(dbCommand, "@LastLoginAt", _LastLoginAt);
if (columnNames.ContainsCI("LastInvalidLoginAt")) AddCommandParameter(dbCommand, "@LastInvalidLoginAt", _LastInvalidLoginAt);
if (columnNames.ContainsCI("InvalidLoginCount")) AddCommandParameter(dbCommand, "@InvalidLoginCount", _InvalidLoginCount);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Fri 4-Mar-2022 15:28:05
// Code generated by Sarand Database Utilities Mon 7-Mar-2022 10:06:56
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal
{
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Fri 4-Mar-2022 15:28:05
// Code generated by Sarand Database Utilities Mon 7-Mar-2022 10:06:56
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal
{
@@ -9,7 +9,7 @@ using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Fri 4-Mar-2022 15:28:05
// Code generated by Sarand Database Utilities Mon 7-Mar-2022 10:06:56
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal
{
@@ -286,13 +286,15 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
// Item column definitions.
private static readonly String aliasUserAccount = "UsrAct";
private static readonly String aliasUserAccount_Region_Country = "UsrAct_Ctr";
private static readonly String prefixUserAccount_Region_Country = "UsrAct_Ctr_";
private static readonly String prefixUserAccount_Region_Country = aliasUserAccount_Region_Country + "_";
private static readonly String aliasUserAccount_Region_Province = "UsrAct_Prv";
private static readonly String prefixUserAccount_Region_Province = "UsrAct_Prv_";
private static readonly String prefixUserAccount_Region_Province = aliasUserAccount_Region_Province + "_";
private static readonly String aliasUserAccount_UserRole_SysAdmin = "UsrAct_UsrRol_SysAdm";
private static readonly String prefixUserAccount_UserRole_SysAdmin = aliasUserAccount_UserRole_SysAdmin + "_";
private static readonly String aliasUserAccount_UserSport = "UsrAct_UsrSpt";
//private static readonly String prefixUserAccount_UserSport = "UsrAct_UsrSpt_";
//private static readonly String prefixUserAccount_UserSport = aliasUserAccount_UserSport + "_";
private static readonly String aliasUserAccount_UserRole = "UsrAct_UsrRol";
//private static readonly String prefixUserAccount_UserRole = "UsrAct_UsrRol_";
//private static readonly String prefixUserAccount_UserRole = aliasUserAccount_UserRole + "_";
private static readonly String colUserAccount_UserRoleCount = "UsrAct_RoleCount";
private static readonly String colUserAccount_SystemAdminRole = "UsrAct_SystemAdminRole";
private void SetUserAccountColDfn
@@ -409,6 +411,26 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
columnDfn.DataName = colUserAccount_SystemAdminRole;
columnDfn.ReadOnly = true;
break;
case SaxUserAccount.Column.LastAdminLoginOn:
SetUserAccountColDfn(columnDfn, "Last Admin login", 100, SaxDbDfn_Core.ColumnIdx.UserRole_LastLoginAt, ColumnAlignment.Center, DataValue.DataType.Date, aliasUserAccount_UserRole_SysAdmin, prefixUserAccount_UserRole_SysAdmin);
columnDfn.ReadOnly = true;
break;
case SaxUserAccount.Column.LastAdminLoginAt:
SetUserAccountColDfn(columnDfn, "Last Admin login", 120, SaxDbDfn_Core.ColumnIdx.UserRole_LastLoginAt, ColumnAlignment.Center, DataValue.DataType.DateTime, aliasUserAccount_UserRole_SysAdmin, prefixUserAccount_UserRole_SysAdmin);
columnDfn.ReadOnly = true;
break;
case SaxUserAccount.Column.LastInvalidAdminLoginOn:
SetUserAccountColDfn(columnDfn, "Last invalid Admin login", 100, SaxDbDfn_Core.ColumnIdx.UserRole_LastInvalidLoginAt, ColumnAlignment.Center, DataValue.DataType.Date, aliasUserAccount_UserRole_SysAdmin, prefixUserAccount_UserRole_SysAdmin);
columnDfn.ReadOnly = true;
break;
case SaxUserAccount.Column.LastInvalidAdminLoginAt:
SetUserAccountColDfn(columnDfn, "Last invalid Admin login", 100, SaxDbDfn_Core.ColumnIdx.UserRole_LastInvalidLoginAt, ColumnAlignment.Center, DataValue.DataType.DateTime, aliasUserAccount_UserRole_SysAdmin, prefixUserAccount_UserRole_SysAdmin);
columnDfn.ReadOnly = true;
break;
case SaxUserAccount.Column.InvalidAdminLoginCount:
SetUserAccountColDfn(columnDfn, "Invalid Admin logins", 80, SaxDbDfn_Core.ColumnIdx.UserRole_InvalidLoginCount, ColumnAlignment.Center, DataValue.DataType.Long, aliasUserAccount_UserRole_SysAdmin, prefixUserAccount_UserRole_SysAdmin);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Common properties.
@@ -738,9 +760,13 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
bool hasProvinceRegionCols = columns.HasId(SaxUserAccount.Column.RegionProvince_Name);
if (columns.HasId(SaxUserAccount.Column.RegionIdProvince) || hasProvinceRegionCols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_RegionIdProvince, aliasUserAccount));
// Security.
// Login.
if (columns.HasId(SaxUserAccount.Column.LastLoginOn) || columns.HasId(SaxUserAccount.Column.LastLoginAt))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_LastLoginAt, aliasUserAccount));
if (columns.HasId(SaxUserAccount.Column.LastInvalidLoginOn) || columns.HasId(SaxUserAccount.Column.LastInvalidLoginAt))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_LastInvalidLoginAt, aliasUserAccount));
if (columns.HasId(SaxUserAccount.Column.InvalidLoginCount))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_InvalidLoginCount, aliasUserAccount));
// Common properties.
if (columns.HasId(SaxUserAccount.Column.Notes))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Notes, aliasUserAccount));
@@ -781,6 +807,23 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasUserAccount_Region_Province), prefixUserAccount_Region_Province + SaxDbDfn_Core.GetColumnName(col, false));
}
//---------------------------------------------------------------------
// System Admin User Role.
if (columns.Exists(item => SaxDbDfn_Core.GetTableForColumn((SaxDbDfn_Core.ColumnIdx)item.DbColumn) == SaxDbDfn_Core.TableIdx.UserRole))
{
DbQueryJoin joinSysAdmin = new DbQueryJoin(DbJoinType.LeftOuter);
joinSysAdmin.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserRole), aliasUserAccount_UserRole_SysAdmin);
joinSysAdmin.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_UserAccountId, aliasUserAccount_UserRole_SysAdmin) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserAccount));
joinSysAdmin.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_UserRoleCode, aliasUserAccount_UserRole_SysAdmin) + "='" + UserRoleCodes.GetCodeForType(Sax.UserRole.SystemAdmin) + "'");
query.Joins.Add(joinSysAdmin);
List<SaxDbDfn_Core.ColumnIdx> cols = new List<SaxDbDfn_Core.ColumnIdx>();
cols.Add(SaxDbDfn_Core.ColumnIdx.UserRole_LastLoginAt);
cols.Add(SaxDbDfn_Core.ColumnIdx.UserRole_LastInvalidLoginAt);
cols.Add(SaxDbDfn_Core.ColumnIdx.UserRole_InvalidLoginCount);
foreach (var col in cols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasUserAccount_UserRole_SysAdmin), prefixUserAccount_UserRole_SysAdmin + SaxDbDfn_Core.GetColumnName(col, false));
}
//---------------------------------------------------------------------
// User Role count.
if (columns.HasId(SaxUserAccount.Column.UserRoleCount))
@@ -214,6 +214,10 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
dbUserRole._Id = SysId.ToLong(userRole.Id);
dbUserRole._UserAccountId = SysId.ToInt(userRole.UserAccountId);
dbUserRole._UserRoleCode = UserRoleCodes.GetCodeForType(userRole.UserRole);
// Login.
dbUserRole._LastLoginAt = userRole.LastLoginAt;
dbUserRole._LastInvalidLoginAt = userRole.LastInvalidLoginAt;
dbUserRole._InvalidLoginCount = userRole.InvalidLoginCount;
// Common.
dbUserRole._Notes = userRole.Notes;
dbUserRole._Status = SacsSystem.GetStatusCode(userRole.Status);
@@ -233,6 +237,10 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
//userRole.Id = new SysId(dbUserRole._Id);
//userRole.UserAccountId = new SysId(dbUserRole._UserAccountId);
//userRole.UserRole = (Sax.UserRole)UserRoles.GetTypeForCode(dbUserRole._UserRoleCode);
// Login.
userRole.LastLoginAt = dbUserRole._LastLoginAt;
userRole.LastInvalidLoginAt = dbUserRole._LastInvalidLoginAt;
userRole.InvalidLoginCount = dbUserRole._InvalidLoginCount;
// Common.
userRole.Notes = dbUserRole._Notes;
userRole.Status = SacsSystem.GetStatusForCode(dbUserRole._Status);
@@ -282,6 +290,29 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
columnDfn.ReadOnly = true;
break;
//-------------------------------------------------------
// Login.
case SaxUserRole.Column.LastLoginOn:
SetUserRoleColDfn(columnDfn, "Last login", 100, SaxDbDfn_Core.ColumnIdx.UserRole_LastLoginAt, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
case SaxUserRole.Column.LastLoginAt:
SetUserRoleColDfn(columnDfn, "Last login", 120, SaxDbDfn_Core.ColumnIdx.UserRole_LastLoginAt, ColumnAlignment.Center, DataValue.DataType.DateTime);
columnDfn.ReadOnly = true;
break;
case SaxUserRole.Column.LastInvalidLoginOn:
SetUserRoleColDfn(columnDfn, "Last invalid login", 100, SaxDbDfn_Core.ColumnIdx.UserRole_LastInvalidLoginAt, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
case SaxUserRole.Column.LastInvalidLoginAt:
SetUserRoleColDfn(columnDfn, "Last invalid login", 100, SaxDbDfn_Core.ColumnIdx.UserRole_LastInvalidLoginAt, ColumnAlignment.Center, DataValue.DataType.DateTime);
columnDfn.ReadOnly = true;
break;
case SaxUserRole.Column.InvalidLoginCount:
SetUserRoleColDfn(columnDfn, "Invalid logins", 80, SaxDbDfn_Core.ColumnIdx.UserRole_InvalidLoginCount, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
//-------------------------------------------------------
// User.
case SaxUserRole.Column.User_EmailAddress:
@@ -494,6 +525,13 @@ namespace Saxonite.Net.Standard.Dbas.Mgr
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_UserAccountId, aliasUserRole));
if (columns.HasId(SaxUserRole.Column.UserRole) || columns.HasId(SaxUserRole.Column.UserRole_Desc))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_UserRoleCode, aliasUserRole));
// Login.
if (columns.HasId(SaxUserRole.Column.LastLoginOn) || columns.HasId(SaxUserRole.Column.LastLoginAt))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_LastLoginAt, aliasUserRole));
if (columns.HasId(SaxUserRole.Column.LastInvalidLoginOn) || columns.HasId(SaxUserRole.Column.LastInvalidLoginAt))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_LastInvalidLoginAt, aliasUserRole));
if (columns.HasId(SaxUserRole.Column.InvalidLoginCount))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_InvalidLoginCount, aliasUserRole));
// Common properties.
if (columns.HasId(SaxUserRole.Column.Notes))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_Notes, aliasUserRole));
@@ -5764,6 +5764,57 @@
<Schema>dbo</Schema>
<Table>UserRole</Table>
<Pos>4</Pos>
<Name>LastLoginAt</Name>
<DataType>DateTime</DataType>
<DataTypeName />
<DataTypeNative>93</DataTypeNative>
<DataTypeNameNative>smalldatetime</DataTypeNameNative>
<IsIdentity>false</IsIdentity>
<Size>16</Size>
<BufferLen>16</BufferLen>
<DecimalDigits>0</DecimalDigits>
<Nullable>Nullable</Nullable>
<IsNullable>true</IsNullable>
<Remarks />
</DbDfnColumn>
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>UserRole</Table>
<Pos>5</Pos>
<Name>LastInvalidLoginAt</Name>
<DataType>DateTime</DataType>
<DataTypeName />
<DataTypeNative>93</DataTypeNative>
<DataTypeNameNative>smalldatetime</DataTypeNameNative>
<IsIdentity>false</IsIdentity>
<Size>16</Size>
<BufferLen>16</BufferLen>
<DecimalDigits>0</DecimalDigits>
<Nullable>Nullable</Nullable>
<IsNullable>true</IsNullable>
<Remarks />
</DbDfnColumn>
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>UserRole</Table>
<Pos>6</Pos>
<Name>InvalidLoginCount</Name>
<DataType>SmallInt</DataType>
<DataTypeName />
<DataTypeNative>5</DataTypeNative>
<DataTypeNameNative>smallint</DataTypeNameNative>
<IsIdentity>false</IsIdentity>
<Size>5</Size>
<BufferLen>2</BufferLen>
<DecimalDigits>0</DecimalDigits>
<Nullable>Nullable</Nullable>
<IsNullable>true</IsNullable>
<Remarks />
</DbDfnColumn>
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>UserRole</Table>
<Pos>7</Pos>
<Name>Notes</Name>
<DataType>VarChar</DataType>
<DataTypeName />
@@ -5780,7 +5831,7 @@
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>UserRole</Table>
<Pos>5</Pos>
<Pos>8</Pos>
<Name>Flags</Name>
<DataType>SmallInt</DataType>
<DataTypeName />
@@ -5797,7 +5848,7 @@
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>UserRole</Table>
<Pos>6</Pos>
<Pos>9</Pos>
<Name>Status</Name>
<DataType>VarChar</DataType>
<DataTypeName />
@@ -5814,7 +5865,7 @@
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>UserRole</Table>
<Pos>7</Pos>
<Pos>10</Pos>
<Name>CreateOn</Name>
<DataType>DateTime</DataType>
<DataTypeName />
@@ -5831,7 +5882,7 @@
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>UserRole</Table>
<Pos>8</Pos>
<Pos>11</Pos>
<Name>CreateBy</Name>
<DataType>Int</DataType>
<DataTypeName />
@@ -5848,7 +5899,7 @@
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>UserRole</Table>
<Pos>9</Pos>
<Pos>12</Pos>
<Name>CreateHost</Name>
<DataType>VarChar</DataType>
<DataTypeName />
@@ -5865,7 +5916,7 @@
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>UserRole</Table>
<Pos>10</Pos>
<Pos>13</Pos>
<Name>UpdateOn</Name>
<DataType>DateTime</DataType>
<DataTypeName />
@@ -5882,7 +5933,7 @@
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>UserRole</Table>
<Pos>11</Pos>
<Pos>14</Pos>
<Name>UpdateBy</Name>
<DataType>Int</DataType>
<DataTypeName />
@@ -5899,7 +5950,7 @@
<DbDfnColumn>
<Schema>dbo</Schema>
<Table>UserRole</Table>
<Pos>12</Pos>
<Pos>15</Pos>
<Name>UpdateHost</Name>
<DataType>VarChar</DataType>
<DataTypeName />
@@ -6887,7 +6938,7 @@
<Clustered>false</Clustered>
<Nullable>false</Nullable>
<Pages>1</Pages>
<UniqueValues>2</UniqueValues>
<UniqueValues>3</UniqueValues>
<HasColumns>false</HasColumns>
<Columns>
<DbDfnIndexColumn>