Files
BusinessMgr-2019/SaBusMgrStandardBase/Base/App/SbmSecurityProfile.cs
T
2024-12-07 18:09:06 +00:00

512 lines
24 KiB
C#

using Newtonsoft.Json;
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.Security;
using Sarand.Net.Standard.Base.Utils;
using System;
using System.Collections.Generic;
namespace Sarand.BusinessMgr.Net.Standard.Base.App
{
//=======================================================================
public class SbmSecurityProfile : SaErrorStateItem, ISbmSecurityProfile_Core
{
//-------------------------------------------------------------------
// Data members.
private static readonly String userNameUnknown = "Unknown";
private bool includeHostSecurityProfile = false;
private SaSecurityProfile userSecurityProfile;
private SaSecurityProfile hostSecurityProfile;
private readonly List<SaSecurityRight> securityRights = new List<SaSecurityRight>();
//-------------------------------------------------------------------
// Construction.
[JsonConstructor]
private SbmSecurityProfile() { }
public SbmSecurityProfile(ISbmUserContext_Core userContext, bool includeHostSecurityProfile)
{
this.UserContext = userContext;
this.includeHostSecurityProfile = includeHostSecurityProfile;
Admin = new AdminProfile();
Manage = new ManageProfile();
Financial = new FinancialProfile();
Contacts = new ContactsProfile();
Transaction = new TransactionsProfile();
}
//-------------------------------------------------------------------
// Properties.
[JsonIgnore]
public ISbmUserContext_Core UserContext { get; }
//-------------------------------------------------------------------
// Refresh profile.
public void RefreshProfile(SbmSessionConsole sessionConsole, SaSecurityConsole securityConsole, SysId userId, List<SaSecurityRight> securityRights)
{
ClearErrorState();
// Make a note of the security right.
this.securityRights.Clear();
this.securityRights.AddRange(securityRights);
SysId previousUserId = UserId;
// Clear existing profile.
UserId = SysId.InvalidOnNull(userId);
// Load new profile.
if (securityConsole != null)
{
userSecurityProfile = securityConsole.GetUserSecurityProfile(UserId);
if (hostSecurityProfile == null && includeHostSecurityProfile)
hostSecurityProfile = securityConsole.GetHostSecurityProfile();
}
SaLogger.Debug($"{SysUtil.Fn} User: '{UserDisplayName}' [Id: {UserId}]" + (SysId.IsValid(previousUserId) ? ". Previous UserId: " + SysId.ToString(previousUserId) : ""));
RefreshProfileSettings(sessionConsole);
}
protected void RefreshProfile(SbmSessionConsole sessionConsole, SaSecurityProfile userSecurityProfile, SaSecurityProfile hostSecurityProfile)
{
this.userSecurityProfile = userSecurityProfile;
this.hostSecurityProfile = hostSecurityProfile;
RefreshProfileSettings(sessionConsole);
}
private void RefreshProfileSettings(SbmSessionConsole sessionConfig)
{
RefreshAdminProfile(sessionConfig);
RefreshManageProfile(sessionConfig);
RefreshFinancialProfile(sessionConfig);
RefreshContactsProfile(sessionConfig);
RefreshTransactionProfile(sessionConfig);
RefreshItemTypeProfile(sessionConfig);
// ToDo Commodities.
}
private void ClearProfile()
{
// Reset security profiles.
Admin = new AdminProfile();
Manage = new ManageProfile();
Financial = new FinancialProfile();
Contacts = new ContactsProfile();
Transaction = new TransactionsProfile();
}
//-------------------------------------------------------------------
// User.
public SysId UserId { get; protected set; } = new SysId();
public String UserDisplayName { get { return (userSecurityProfile != null ? userSecurityProfile.Description : userNameUnknown); } }
public String UserLocation { get { return (userSecurityProfile != null ? userSecurityProfile.Location : ""); } }
public DateTime UserLastLogin { get { return (userSecurityProfile != null ? userSecurityProfile.LastLogin : DateTime.MinValue); } }
//-------------------------------------------------------------------
// Utilities.
public bool IsUserMemberOfSecurityGroup(SysId secGroupId)
{
if (userSecurityProfile != null)
return userSecurityProfile.IsMemberOfSecurityGroup(secGroupId);
return false;
}
public bool IsSecurityRightGranted(Sbm.SecurityRight securityRight, SysId id = null)
{
if (userSecurityProfile != null)
return userSecurityProfile.IsSecurityRightGranted(securityRights.GetCodeForType(securityRight));
return false;
}
public bool IsSecurityRightDenied(Sbm.SecurityRight securityRight, SysId id = null)
{
if (userSecurityProfile != null)
return userSecurityProfile.IsSecurityRightDenied(securityRights.GetCodeForType(securityRight), id);
return true;
}
//-------------------------------------------------------------------
// Security rights - Admin.
public class AdminProfile
{
internal AdminProfile() { }
public bool CanManageSecurity { get; internal set; } = false;
public bool CanManageDatabase { get; internal set; } = false;
public bool CanManageReferenceData { get; internal set; } = false;
public bool CanManageInterfaces { get; internal set; } = false;
}
public AdminProfile Admin { get; internal set; }
private void RefreshAdminProfile(SbmSessionConsole sessionConfig)
{
Admin.CanManageSecurity = UserHasSecurityRight(Sbm.SecurityRight.Security_Admin);
Admin.CanManageDatabase = UserHasSecurityRight(Sbm.SecurityRight.Database_Admin);
Admin.CanManageReferenceData = UserHasSecurityRight(Sbm.SecurityRight.ReferenceData_Admin);
Admin.CanManageInterfaces = UserHasSecurityRight(Sbm.SecurityRight.InterfaceConfig);
}
//-------------------------------------------------------------------
// Security rights - Manage.
public class ManageProfile
{
internal ManageProfile() { }
public bool CanManageTasks { get; internal set; } = false;
public bool CanManageTimesheets { get; internal set; } = false;
}
public ManageProfile Manage { get; internal set; }
private void RefreshManageProfile(SbmSessionConsole sessionConfig)
{
Manage.CanManageTasks = UserHasSecurityRight(Sbm.SecurityRight.TaskManager);
Manage.CanManageTimesheets = UserHasSecurityRight(Sbm.SecurityRight.TimesheetManager);
}
//-------------------------------------------------------------------
// Security rights - Financials.
public class FinancialProfile
{
internal FinancialProfile() { }
public bool ViewFinancials { get; internal set; }
public bool UpdateFinancials { get; internal set; }
public bool ViewCommoditySupplyFinancials { get; internal set; }
public bool UpdateCommoditySupplyFinancials { get; internal set; }
public bool ViewCommoditySalesFinancials { get; internal set; }
public bool UpdateCommoditySalesFinancials { get; internal set; }
public bool FinancialsAccessControl { get; internal set; }
}
public FinancialProfile Financial { get; internal set; }
private void RefreshFinancialProfile(SbmSessionConsole sessionConfig)
{
Financial.ViewFinancials = UserHasSecurityRight(Sbm.SecurityRight.Financial_View);
Financial.UpdateFinancials = UserHasSecurityRight(Sbm.SecurityRight.Financial_Update);
Financial.ViewCommoditySupplyFinancials = UserCanAccessFinancialViewOfType(Sbm.FinancialType.CommoditySupply);
Financial.UpdateCommoditySupplyFinancials = UserCanAccessFinancialUpdateOfType(Sbm.FinancialType.CommoditySupply);
Financial.ViewCommoditySalesFinancials = UserCanAccessFinancialViewOfType(Sbm.FinancialType.CommoditySales);
Financial.UpdateCommoditySalesFinancials = UserCanAccessFinancialUpdateOfType(Sbm.FinancialType.CommoditySales);
// Config options.
Financial.FinancialsAccessControl = (sessionConfig != null && !sessionConfig.AllowOption(Sbm.ConfigOption.AllowFinancialsAccessControl));
}
private bool UserCanAccessFinancialViewOfType(Sbm.FinancialType financialType)
{
if ((int)financialType < 1) return false;
// If specific type of financial is requested, check that view is not denied.
if (IsSecurityRightDenied(Sbm.SecurityRight.Financial_ViewByType, new SysId((int)financialType)))
return false;
return true;
}
private bool UserCanAccessFinancialUpdateOfType(Sbm.FinancialType financialType)
{
if ((int)financialType < 1) return false;
// If specific type of financial is requested, check that update is not denied.
if (IsSecurityRightDenied(Sbm.SecurityRight.Financial_UpdateByType, new SysId((int)financialType)))
return false;
return true;
}
/// <summary>Does the user have sufficient rights to view the specified financials.</summary>
public bool UserCanViewFinancials(Sbm.FinancialType financialType = Sbm.FinancialType.Any)
{
if (!Financial.FinancialsAccessControl) return true;
if (Financial.UpdateFinancials || Financial.ViewFinancials)
{
// If specific type of financial is requested, check that view access is not denied.
if (financialType == Sbm.FinancialType.CommoditySupply)
return Financial.ViewCommoditySupplyFinancials;
else if (financialType == Sbm.FinancialType.CommoditySales)
return Financial.ViewCommoditySalesFinancials;
else return true;
}
return false;
}
/// <summary>Does the user have sufficient rights to update the specified financials.</summary>
public bool UserCanUpdateFinancials(Sbm.FinancialType financialType = Sbm.FinancialType.Any)
{
if (!Financial.FinancialsAccessControl) return true;
if (Financial.UpdateFinancials)
{
// If specific type of financial is requested, check that update access is not denied.
if (financialType == Sbm.FinancialType.CommoditySupply)
return Financial.UpdateCommoditySupplyFinancials;
else if (financialType == Sbm.FinancialType.CommoditySales)
return Financial.UpdateCommoditySalesFinancials;
else return true;
}
return false;
}
//-------------------------------------------------------------------
// Security rights - Contacts.
public class ContactsProfile
{
internal ContactsProfile() { }
public bool Create { get; internal set; } = false;
public bool Update { get; internal set; } = false;
}
public ContactsProfile Contacts { get; internal set; }
public bool UserCanCreateContacts() { return Contacts.Create; }
public bool UserCanUpdateContacts() { return Contacts.Update; }
private void RefreshContactsProfile(SbmSessionConsole sessionConfig)
{
Contacts.Update = (UserHasSecurityRight(Sbm.SecurityRight.Affiliate_Update));
Contacts.Create = (Contacts.Update || UserHasSecurityRight(Sbm.SecurityRight.Affiliate_Create));
}
//-------------------------------------------------------------------
// Security rights - Transactions.
public class TransactionsProfile
{
internal TransactionsProfile() { }
public bool Create { get; internal set; } = false;
public bool Update { get; internal set; } = false;
public bool CanUpdateTransactionTypeStatusCat(SbmSecurityProfile securityProfile, Sbm.TransactionType transactionType, SbmTransaction.StatusCat transactionStatusCat)
{
SysId transactionTypeStatusCatId = SbmTransaction.GetTransactionTypeStatusId(transactionType, transactionStatusCat);
// Check if update of this transaction type and status is denied:
if (securityProfile.IsSecurityRightDenied(Sbm.SecurityRight.Transaction_UpdateByTypeStatus, transactionTypeStatusCatId))
return false;
// Check if update of this transaction type and status is explicitly allowed:
if (securityProfile.IsSecurityRightGranted(Sbm.SecurityRight.Transaction_UpdateByTypeStatus, transactionTypeStatusCatId))
return true;
// Check if any other statuses for this type of transaction are allowed.
foreach (TypeCodeDesc statusCat in SbmTransaction.GetTransactionStatusCats(securityProfile.UserContext, transactionType))
{
SbmTransaction.StatusCat transactionStatusCatOther = (SbmTransaction.StatusCat)statusCat.Type;
// Ignore the transaction status category.
if (transactionStatusCatOther == transactionStatusCat) continue;
if (securityProfile.IsSecurityRightGranted(Sbm.SecurityRight.Transaction_UpdateByTypeStatus, SbmTransaction.GetTransactionTypeStatusId(transactionType, transactionStatusCatOther)))
// Explicit granting of right to another status for this transaction right
// implies that other statuses are implicitly denied.
return false;
}
return true;
}
}
public TransactionsProfile Transaction { get; internal set; }
private void RefreshTransactionProfile(SbmSessionConsole sessionConfig)
{
Transaction.Update = (UserHasSecurityRight(Sbm.SecurityRight.Transaction_Update));
Transaction.Create = (Transaction.Update || UserHasSecurityRight(Sbm.SecurityRight.Transaction_View));
}
public bool UserCanAccessTransactionsOfType(Sbm.TransactionType transactionType)
{
if ((int)transactionType < 1) return false;
// Check if specific type of transaction is denied.
if (IsSecurityRightDenied(Sbm.SecurityRight.Transaction_ByType, new SysId((int)transactionType)))
return false;
return true;
}
//-------------------------------------------------------------------
// Security rights - ItemType.
public class ItemTypesProfile
{
internal ItemTypesProfile() { }
public bool Create { get; internal set; }
public bool Update { get; internal set; }
public bool Remove { get; internal set; }
// Config options.
public bool Processes { get; internal set; }
public bool Contacts { get; internal set; }
public bool Commodities { get; internal set; }
public bool Portfolios { get; internal set; }
public bool PriceSets { get; internal set; }
public bool CommodityCustomers { get; internal set; }
public bool CommoditySuppliers { get; internal set; }
public bool Transactions { get; internal set; }
public bool Assets { get; internal set; }
public bool Vehicles { get; internal set; }
public bool StockLocations { get; internal set; }
public bool StockContainers { get; internal set; }
public bool StockControl { get; internal set; }
}
public ItemTypesProfile ItemType { get; } = new ItemTypesProfile();
private void RefreshItemTypeProfile(SbmSessionConsole sessionConfig)
{
ItemType.Processes = sessionConfig.AllowOption(Sbm.ConfigOption.AllowProcesses);
ItemType.Contacts = sessionConfig.AllowOption(Sbm.ConfigOption.AllowContacts);
ItemType.Commodities = sessionConfig.AllowOption(Sbm.ConfigOption.AllowCommodities);
ItemType.Portfolios = sessionConfig.AllowOption(Sbm.ConfigOption.AllowPortfolios);
ItemType.PriceSets = sessionConfig.AllowOption(Sbm.ConfigOption.AllowPriceSets);
ItemType.CommodityCustomers = sessionConfig.AllowOption(Sbm.ConfigOption.CommodityCustomers);
ItemType.CommoditySuppliers = sessionConfig.AllowOption(Sbm.ConfigOption.CommoditySuppliers);
ItemType.Transactions = sessionConfig.AllowOption(Sbm.ConfigOption.AllowTransactions);
ItemType.Assets = sessionConfig.AllowOption(Sbm.ConfigOption.AllowAssets);
ItemType.Vehicles = sessionConfig.AllowOption(Sbm.ConfigOption.AllowVehicles);
ItemType.StockLocations = sessionConfig.GetStockControlConfig().AllowStockLocations();
ItemType.StockContainers = sessionConfig.GetStockControlConfig().AllowStockContainers();
ItemType.StockControl = sessionConfig.GetStockControlConfig().AllowStockControl();
}
public bool ItemTypeIsAllowed(Sbm.ItemType itemType)
{
switch (itemType)
{
//case Sbm.ItemType.SecItem:
//case Sbm.ItemType.Currency:
//case Sbm.ItemType.Region:
//case Sbm.ItemType.Language:
//case Sbm.ItemType.TaxCode:
//case Sbm.ItemType.UnitMeasure:
case Sbm.ItemType.Process: return ItemType.Processes;
case Sbm.ItemType.Affiliate:
case Sbm.ItemType.Address: return ItemType.Contacts;
case Sbm.ItemType.Commodity: return ItemType.Commodities;
case Sbm.ItemType.PortfolioItem: return ItemType.Portfolios;
case Sbm.ItemType.Location: return ItemType.StockLocations;
case Sbm.ItemType.Container:
case Sbm.ItemType.ContainerItem: return ItemType.StockContainers;
case Sbm.ItemType.Movement:
case Sbm.ItemType.StockLevel: return ItemType.StockControl;
case Sbm.ItemType.PriceSet:
case Sbm.ItemType.Price: return ItemType.PriceSets;
case Sbm.ItemType.CommodityCustomer: return ItemType.CommodityCustomers;
case Sbm.ItemType.CommoditySupplier: return ItemType.CommoditySuppliers;
//case Sbm.ItemType.Association:
case Sbm.ItemType.Transaction:
case Sbm.ItemType.Requirement:
case Sbm.ItemType.Constituent: return ItemType.Transactions;
//case Sbm.ItemType.SystemAccount:
//case Sbm.ItemType.SystemUser:
//case Sbm.ItemType.SystemAccountUser:
case Sbm.ItemType.AssetCategory:
case Sbm.ItemType.AssetCategoryProcess:
case Sbm.ItemType.Asset:
case Sbm.ItemType.AssetProcess: return ItemType.Assets;
case Sbm.ItemType.VehicleClass:
case Sbm.ItemType.Vehicle:
case Sbm.ItemType.VehicleEvent:
case Sbm.ItemType.VehicleFeature: return ItemType.Vehicles;
case Sbm.ItemType.CommodityProcess: return ItemType.Processes;
case Sbm.ItemType.RequirementProcess: return ItemType.Processes;
//case Sbm.ItemType.Interface:
}
return true;
}
public bool UserCanCreateItemType(Sbm.ItemType itemType)
{
if (!ItemTypeIsAllowed(itemType)) return false;
switch (itemType)
{
case Sbm.ItemType.SecItem: return IsSecurityRightGranted(Sbm.SecurityRight.Security_Admin);
case Sbm.ItemType.Currency:
case Sbm.ItemType.Region:
case Sbm.ItemType.Language:
case Sbm.ItemType.TaxCode:
case Sbm.ItemType.UnitMeasure: return IsSecurityRightGranted(Sbm.SecurityRight.ReferenceData_Admin);
case Sbm.ItemType.Process: return IsSecurityRightGranted(Sbm.SecurityRight.ReferenceData_Admin);
case Sbm.ItemType.Affiliate: return IsSecurityRightGranted(Sbm.SecurityRight.Affiliate_Create);
case Sbm.ItemType.Address: return IsSecurityRightGranted(Sbm.SecurityRight.Affiliate_Update);
case Sbm.ItemType.Commodity: return IsSecurityRightGranted(Sbm.SecurityRight.Commodity_Create);
case Sbm.ItemType.PortfolioItem: return IsSecurityRightGranted(Sbm.SecurityRight.Commodity_Update);
case Sbm.ItemType.Location: return IsSecurityRightGranted(Sbm.SecurityRight.ReferenceData_Admin);
case Sbm.ItemType.Container: return IsSecurityRightGranted(Sbm.SecurityRight.Commodity_Create);
case Sbm.ItemType.ContainerItem: return IsSecurityRightGranted(Sbm.SecurityRight.Commodity_Update);
case Sbm.ItemType.Movement: return IsSecurityRightGranted(Sbm.SecurityRight.Commodity_Update);
case Sbm.ItemType.StockLevel: return IsSecurityRightGranted(Sbm.SecurityRight.Commodity_Update);
case Sbm.ItemType.PriceSet:
case Sbm.ItemType.Price: return IsSecurityRightGranted(Sbm.SecurityRight.Commodity_Update) && UserCanUpdateFinancials();
case Sbm.ItemType.CommodityCustomer:
case Sbm.ItemType.CommoditySupplier: return IsSecurityRightGranted(Sbm.SecurityRight.Association_Update) && IsSecurityRightGranted(Sbm.SecurityRight.Commodity_Update);
case Sbm.ItemType.Association: return IsSecurityRightGranted(Sbm.SecurityRight.Association_Create);
case Sbm.ItemType.Transaction: return IsSecurityRightGranted(Sbm.SecurityRight.Transaction_Create);
case Sbm.ItemType.Requirement:
case Sbm.ItemType.Constituent: return IsSecurityRightGranted(Sbm.SecurityRight.Transaction_Update);
case Sbm.ItemType.SystemAccount:
case Sbm.ItemType.SystemUser:
case Sbm.ItemType.SystemAccountUser: return IsSecurityRightGranted(Sbm.SecurityRight.Security_Admin);
case Sbm.ItemType.AssetCategory:
case Sbm.ItemType.AssetCategoryProcess:
case Sbm.ItemType.Asset:
case Sbm.ItemType.AssetProcess: return IsSecurityRightGranted(Sbm.SecurityRight.Asset_Create);
case Sbm.ItemType.VehicleClass:
case Sbm.ItemType.Vehicle:
case Sbm.ItemType.VehicleEvent:
case Sbm.ItemType.VehicleFeature: return IsSecurityRightGranted(Sbm.SecurityRight.Asset_Create);
case Sbm.ItemType.CommodityProcess: return IsSecurityRightGranted(Sbm.SecurityRight.Commodity_Update);
case Sbm.ItemType.RequirementProcess: return IsSecurityRightGranted(Sbm.SecurityRight.Transaction_Update);
case Sbm.ItemType.Interface: return IsSecurityRightGranted(Sbm.SecurityRight.InterfaceConfig);
}
return false;
}
public bool UserCanUpdateItemType(Sbm.ItemType itemType)
{
switch (itemType)
{
case Sbm.ItemType.SecItem: return IsSecurityRightGranted(Sbm.SecurityRight.Security_Admin);
case Sbm.ItemType.Currency:
case Sbm.ItemType.Region:
case Sbm.ItemType.Language:
case Sbm.ItemType.TaxCode:
case Sbm.ItemType.UnitMeasure: return IsSecurityRightGranted(Sbm.SecurityRight.ReferenceData_Admin);
case Sbm.ItemType.Process: return IsSecurityRightGranted(Sbm.SecurityRight.ReferenceData_Admin);
case Sbm.ItemType.Affiliate:
case Sbm.ItemType.Address: return IsSecurityRightGranted(Sbm.SecurityRight.Affiliate_Update);
case Sbm.ItemType.Commodity: return IsSecurityRightGranted(Sbm.SecurityRight.Commodity_Update);
case Sbm.ItemType.PortfolioItem: return IsSecurityRightGranted(Sbm.SecurityRight.Commodity_Update);
case Sbm.ItemType.Location: return IsSecurityRightGranted(Sbm.SecurityRight.ReferenceData_Admin);
case Sbm.ItemType.Container:
case Sbm.ItemType.ContainerItem: return IsSecurityRightGranted(Sbm.SecurityRight.Commodity_Update);
case Sbm.ItemType.Movement:
case Sbm.ItemType.StockLevel: return IsSecurityRightGranted(Sbm.SecurityRight.Commodity_Update);
case Sbm.ItemType.PriceSet:
case Sbm.ItemType.Price: return IsSecurityRightGranted(Sbm.SecurityRight.Commodity_Update) && UserCanUpdateFinancials();
case Sbm.ItemType.CommodityCustomer:
case Sbm.ItemType.CommoditySupplier: return IsSecurityRightGranted(Sbm.SecurityRight.Association_Update) && IsSecurityRightGranted(Sbm.SecurityRight.Commodity_Update);
case Sbm.ItemType.Association: return IsSecurityRightGranted(Sbm.SecurityRight.Association_Update);
case Sbm.ItemType.Transaction:
case Sbm.ItemType.Requirement:
case Sbm.ItemType.Constituent: return IsSecurityRightGranted(Sbm.SecurityRight.Transaction_Update);
case Sbm.ItemType.SystemAccount:
case Sbm.ItemType.SystemUser:
case Sbm.ItemType.SystemAccountUser: return IsSecurityRightGranted(Sbm.SecurityRight.Security_Admin);
case Sbm.ItemType.AssetCategory:
case Sbm.ItemType.AssetCategoryProcess:
case Sbm.ItemType.Asset:
case Sbm.ItemType.AssetProcess: return IsSecurityRightGranted(Sbm.SecurityRight.Asset_Update);
case Sbm.ItemType.VehicleClass:
case Sbm.ItemType.Vehicle:
case Sbm.ItemType.VehicleEvent:
case Sbm.ItemType.VehicleFeature: return IsSecurityRightGranted(Sbm.SecurityRight.Asset_Update);
case Sbm.ItemType.CommodityProcess: return IsSecurityRightGranted(Sbm.SecurityRight.Commodity_Update);
case Sbm.ItemType.RequirementProcess: return IsSecurityRightGranted(Sbm.SecurityRight.Transaction_Update);
case Sbm.ItemType.Interface: return IsSecurityRightGranted(Sbm.SecurityRight.InterfaceConfig);
}
return false;
}
public bool UserCanRemoveItemType(Sbm.ItemType itemType)
{
switch (itemType)
{
case Sbm.ItemType.Transaction:
if (!IsSecurityRightGranted(Sbm.SecurityRight.Transaction_Remove)) return false;
break;
}
return (UserCanCreateItemType(itemType) && UserCanUpdateItemType(itemType));
}
//-------------------------------------------------------------------
// Security rights.
public bool UserHasSecurityRight(Sbm.SecurityRight securityRight, SysId dataItemId = null)
{
String rightCode = securityRights.GetCodeForType(securityRight);
if (StringUtil.IsEmpty(rightCode)) return false;
// Check if right is denied by either user or host profiles.
if (userSecurityProfile != null && userSecurityProfile.IsSecurityRightDenied(rightCode)) return false;
if (hostSecurityProfile != null && hostSecurityProfile.IsSecurityRightDenied(rightCode)) return false;
// Check if right is granted by either user or host profiles.
if (userSecurityProfile != null && userSecurityProfile.IsSecurityRightGranted(rightCode)) return true;
if (hostSecurityProfile != null && hostSecurityProfile.IsSecurityRightGranted(rightCode)) return true;
return false;
}
//-------------------------------------------------------------------
}
//=======================================================================
}