Files
BusinessMgr-2019/SaBusMgrStandardDbas/Dbas/Consoles/SbmSecurityConsole_Dbas.cs
T

258 lines
12 KiB
C#

using Sarand.BusinessMgr.Net.Standard.Base.App;
using Sarand.BusinessMgr.Net.Standard.Base.Bus;
using Sarand.BusinessMgr.Net.Standard.Base.Consoles;
using Sarand.BusinessMgr.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Security;
using Sarand.Net.Standard.Base.UpdateLog;
using Sarand.Net.Standard.Dbas.Security;
using System;
using System.Collections.Generic;
using System.Linq;
namespace Sarand.BusinessMgr.Net.Standard.Dbas.Consoles
{
//=======================================================================
public abstract class SbmSecurityConsole_Dbas : SaSecurityConsole_Dbas
{
//-------------------------------------------------------------------
// Data members.
private class DataMembers
{
public DataMembers(SbmInternals internalsSupplied)
{
this.InternalsSupplied = internalsSupplied;
}
public SbmInternals InternalsSupplied { get; }
public List<TypeCodeDesc> SecurityRights { get; set; }
}
private DataMembers mbr { get; }
//-------------------------------------------------------------------
// Construction.
protected SbmSecurityConsole_Dbas(SbmInternals internals) :
base(internals.BusMgrDatabase)
{
mbr = new DataMembers(internals);
RegisterSecurityRights();
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
}
base.Dispose(disposing);
}
//-------------------------------------------------------------------
// Properties.
public ISbmUserOrganisationContext UserContext { get { return Internals.UserContext; } }
public SbmSessionContext SessionContext { get { return UserContext.SessionContext; } }
private SbmInternals Internals { get { return mbr.InternalsSupplied; } }
public override short SecurityItemDataType { get { return (short)Sbm.ItemType.SecurityItem; } }
public override short SecurityLinkDataType { get { return (short)Sbm.ItemType.SecurityLink; } }
// Consoles.
private SbmSessionConsole SessionConsole { get { return Internals.SessionConsole; } }
public override SaUpdateLogConsole UpdateLogConsole { get { return Internals.UpdateLogConsole; } }
//-------------------------------------------------------------------
// Utilities.
//-------------------------------------------------------------------
// S e c u r i t y R i g h t s
//-------------------------------------------------------------------
protected List<TypeCodeDesc> GetSecurityRights()
{
if (mbr.SecurityRights == null)
{
mbr.SecurityRights = new List<TypeCodeDesc>();
if (SessionConsole != null && SessionConsole.AllowOption(Sbm.ConfigOption.Contacts))
{
mbr.SecurityRights.Add(Sbm.SecurityRight.Affiliate_Create, "AffIns", "Affiliates - Create");
mbr.SecurityRights.Add(Sbm.SecurityRight.Affiliate_Update, "AffUpd", "Affiliates - Update");
mbr.SecurityRights.Add(Sbm.SecurityRight.Association_Create, "AssIns", "Associations - Create");
mbr.SecurityRights.Add(Sbm.SecurityRight.Association_Update, "AssUpd", "Associations - Update");
}
if (SessionConsole != null && SessionConsole.AllowOption(Sbm.ConfigOption.Commodities))
{
mbr.SecurityRights.Add(Sbm.SecurityRight.Commodity_Create, "CmdIns", "Commodities - Create");
mbr.SecurityRights.Add(Sbm.SecurityRight.Commodity_Update, "CmdUpd", "Commodities - Update");
if (SessionConsole.GetStockControlConfig().AllowStockControl())
{
mbr.SecurityRights.Add(Sbm.SecurityRight.StockTake, "CmdStkTak", "Commodities - Stock Take");
}
}
if (SessionConsole != null && SessionConsole.AllowOption(Sbm.ConfigOption.Assets))
{
mbr.SecurityRights.Add(Sbm.SecurityRight.Asset_Create, "AssetIns", "Assets - Create");
mbr.SecurityRights.Add(Sbm.SecurityRight.Asset_Update, "AssetUpd", "Assets - Update");
}
if (SessionConsole != null && SessionConsole.AllowOption(Sbm.ConfigOption.Transactions))
{
mbr.SecurityRights.Add(Sbm.SecurityRight.Transaction_Create, "TraIns", "Transactions - Create");
mbr.SecurityRights.Add(Sbm.SecurityRight.Transaction_Update, "TraUpd", "Transactions - Update");
mbr.SecurityRights.Add(Sbm.SecurityRight.Transaction_Remove, "TraRem", "Transactions - Remove");
mbr.SecurityRights.Add(Sbm.SecurityRight.Transaction_ByType, "TransType", "Transactions - Allow by type");
mbr.SecurityRights.Add(Sbm.SecurityRight.Transaction_UpdateByTypeStatus, "UpdTransTypeStat", "Transactions - Update by type and status");
}
mbr.SecurityRights.Add(Sbm.SecurityRight.Security_Admin, "SecAdm", "Admin - Security");
mbr.SecurityRights.Add(Sbm.SecurityRight.Database_Admin, "DbAdm", "Admin - Database");
mbr.SecurityRights.Add(Sbm.SecurityRight.ReferenceData_Admin, "RefAdm", "Admin - Reference data");
if (SessionConsole != null && SessionConsole.AllowInterfaces())
{
mbr.SecurityRights.Add(Sbm.SecurityRight.InterfaceConfig, "IntCfg", "Interfaces - Configuration");
mbr.SecurityRights.Add(Sbm.SecurityRight.InterfaceByCategory, "IntCategory", "Interfaces - Allow by category");
}
mbr.SecurityRights.Add(Sbm.SecurityRight.Financial_Update, "FinUpd", "Financials - Update");
mbr.SecurityRights.Add(Sbm.SecurityRight.Financial_View, "FinLst", "Financials - View");
mbr.SecurityRights.Add(Sbm.SecurityRight.Financial_ViewByType, "FinType", "Financials - View by type");
mbr.SecurityRights.Add(Sbm.SecurityRight.Financial_UpdateByType, "FinTypeUpd", "Financials - Update by type");
if (SessionConsole != null && SessionConsole.AllowOption(Sbm.ConfigOption.TimeRecording))
{
mbr.SecurityRights.Add(Sbm.SecurityRight.TimesheetManager, "TimMgr", "Manage - Timesheets");
}
if (SessionConsole != null && SessionConsole.AllowOption(Sbm.ConfigOption.Tasks))
{
mbr.SecurityRights.Add(Sbm.SecurityRight.TaskManager, "TskMgr", "Manage - Tasks");
}
}
return mbr.SecurityRights;
}
//-------------------------------------------------------------------
// T r a n s a c t i o n s
//-------------------------------------------------------------------
private List<SysIdString> GetTransactionTypeStatusRights(bool fullList)
{
// Construct list of transaction types and statuses to use in security rights.
List<SysIdString> transactionTypesStatus = new List<SysIdString>();
foreach (TypeCodeDesc transactionType in Internals.GetApplicationCodes(Sbm.ApplicationCode.TransactionType))
{
Sbm.TransactionType transType = (Sbm.TransactionType)transactionType.Type;
// Only interested in sales quotes and orders for now.
bool bValidTransType = false;
if (!bValidTransType) bValidTransType = (transType == Sbm.TransactionType.SalesQuote);
if (!bValidTransType) bValidTransType = (transType == Sbm.TransactionType.SalesOrder);
if ((fullList || bValidTransType) && SessionConsole.AllowTransactionType(transType))
{
// Retrieve status categories for transaction type:
foreach (TypeCodeDesc transactionStatus in SbmTransaction.GetTransactionStatusCats(transType))
{
SbmTransaction.StatusCat transStatusCat = (SbmTransaction.StatusCat)transactionStatus.Type;
String sDesc = transactionType.Desc + " - " + transactionType.Desc;
SysId transactionTypeIdStatus = GetTransactionTypeStatusId(transType, transStatusCat);
if (fullList || SessionConsole.AllowTransactionType(transType))
transactionTypesStatus.Add(transactionTypeIdStatus, transactionStatus.Desc);
}
}
}
return transactionTypesStatus;
}
//-------------------------------------------------------------------
// TRansaction Status Id.
private SysId GetTransactionTypeStatusId(Sbm.TransactionType transactionType, SbmTransaction.StatusCat transactionStatusCat)
{
return new SysId(((int)transactionType * 100) + (int)transactionStatusCat);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// R e g i t e r S e c u r i t y R i g h t s
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Register Security Rights.
public override void RegisterSecurityRights()
{
// Reset.
ClearRegisteredSecurityRights();
//---------------------------------------------------------------
// Register data item types. [Not used - to demonstrate option]
RegisterDataItemType((short)Sbm.ItemType.Commodity, "Commodity");
//---------------------------------------------------------------
// Register security rights.
foreach (TypeCodeDesc securityRight in GetSecurityRights())
{
TypeCodeDesc secRight = securityRight;
switch (secRight.Type)
{
case (int)Sbm.SecurityRight.Transaction_ByType:
RegisterSecurityRight(secRight.Type, secRight.Code, secRight.Desc, (short)Sbm.ItemType.TransactionType);
break;
case (int)Sbm.SecurityRight.Transaction_UpdateByTypeStatus:
RegisterSecurityRight(secRight.Type, secRight.Code, secRight.Desc, (short)Sbm.ItemType.TransactionTypeStatus);
break;
case (int)Sbm.SecurityRight.InterfaceByCategory:
RegisterSecurityRight(secRight.Type, secRight.Code, secRight.Desc, (short)Sbm.ItemType.InterfaceCategory);
break;
case (int)Sbm.SecurityRight.Financial_ViewByType:
RegisterSecurityRight(secRight.Type, secRight.Code, secRight.Desc, (short)Sbm.ItemType.FinancialType);
break;
case (int)Sbm.SecurityRight.Financial_UpdateByType:
RegisterSecurityRight(secRight.Type, secRight.Code, secRight.Desc, (short)Sbm.ItemType.FinancialType);
break;
default:
RegisterSecurityRight(secRight.Type, secRight.Code, secRight.Desc);
break;
}
}
//---------------------------------------------------------------
// Register the security data item types.
if (SessionConsole != null)
{
// Transaction types:
List<SysIdString> transactionTypesDesc = new List<SysIdString>();
List<SysIdString> transactionTypesDescAllowed = new List<SysIdString>();
foreach (TypeCodeDesc transactionType in Internals.GetApplicationCodes(Sbm.ApplicationCode.TransactionType))
{
if (SessionConsole.AllowTransactionType((Sbm.TransactionType)transactionType.Type))
transactionTypesDescAllowed.Add(new SysId(transactionType.Type), transactionType.Desc);
transactionTypesDesc.Add(new SysId(transactionType.Type), transactionType.Desc);
}
RegisterDataItems((short)Sbm.ItemType.TransactionType, transactionTypesDescAllowed, transactionTypesDesc);
// Transaction types with statuses:
List<SysIdString> transactionTypesDescStatus = GetTransactionTypeStatusRights(false);
List<SysIdString> transactionTypesDescStatusAllowed = GetTransactionTypeStatusRights(true);
RegisterDataItems((short)Sbm.ItemType.TransactionTypeStatus, transactionTypesDescStatusAllowed, transactionTypesDescStatus);
// Interface Categories:
List<SysIdString> interfaceCategoriesDesc = new List<SysIdString>();
List<SysIdString> interfaceCategoriesDescAllowed = new List<SysIdString>();
foreach (TypeCodeDesc interfaceCategory in SacsSystem.GetCodesOfType(SaSysCodeType.InterfaceCategory))
{
if (SessionConsole.AllowInterfaceCategory((SaInterfaceCategory)interfaceCategory.Type))
interfaceCategoriesDescAllowed.Add(new SysId(interfaceCategory.Type), interfaceCategory.Desc);
interfaceCategoriesDesc.Add(new SysId(interfaceCategory.Type), interfaceCategory.Desc);
}
RegisterDataItems((short)Sbm.ItemType.InterfaceCategory, interfaceCategoriesDescAllowed, interfaceCategoriesDesc);
// Financial types:
List<SysIdString> financialTypesDesc = new List<SysIdString>();
List<SysIdString> financialTypesDescAllowed = new List<SysIdString>();
foreach (TypeCodeDesc financialType in Internals.GetApplicationCodes(Sbm.ApplicationCode.FinancialType))
{
financialTypesDescAllowed.Add(new SysId(financialType.Type), financialType.Desc);
financialTypesDesc.Add(new SysId(financialType.Type), financialType.Desc);
}
RegisterDataItems((short)Sbm.ItemType.FinancialType, financialTypesDescAllowed, financialTypesDesc);
}
//---------------------------------------------------------------
}
CodeDesc GetSecurityRight(Sbm.SecurityRight securityRight)
{
return mbr.SecurityRights.GetCodeDescForType(securityRight);
}
//-------------------------------------------------------------------
}
//=======================================================================
}