using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Dbas; using Sarand.Net.Standard.Base.Security; using Sarand.Net.Standard.Dbas.Data; using Sarand.Net.Standard.Dbas.Security.Internal; using System; using System.Collections.Generic; using System.Data.Common; using System.Text; using Sarand.Net.Standard.Base.Utils; namespace Sarand.Net.Standard.Dbas.Security { //======================================================================= partial class SaSecurityMgr_Dbas { //******************************************************************* // S e c u r i t y I t e m //******************************************************************* // Associated data. public override bool SecurityItemIsSourceOfLinks (SysId securityItemId) { String filter = SaSecurityDbDfn.GetColumnName(SaSecurityDbDfn.ColumnIdx.SaSecLink_ItemOwner)+"="+SysId.ToString(securityItemId); return (Database.GetRowCount(TableName_SecLink, filter) > 0); } public override bool SecurityItemIsTargetOfLinks (SysId securityItemId) { String filter = SaSecurityDbDfn.GetColumnName(SaSecurityDbDfn.ColumnIdx.SaSecLink_ItemTarget)+"="+SysId.ToString(securityItemId); return (Database.GetRowCount(TableName_SecLink, filter) > 0); } public override bool SecurityItemHasLinksWith (SysId securityItemIdOwner, SysId securityItemIdTarget) { SaSecurityLink.Params prmSecLink = new SaSecurityLink.Params(); prmSecLink.includedItemIdsOwner.Add(securityItemIdOwner); prmSecLink.includedItemIdsTarget.Add(securityItemIdTarget); prmSecLink.StatusCat = SaSecurityLink.StatusCat.Any; return (GetSecurityLinkCount(prmSecLink) > 0); } //------------------------------------------------------------------- // Security Item exists. public override bool SecurityItemExistsById (SysId id) { ClearErrorState(); if (!SysId.IsValid(id)) return false; SaSecurityItem.Params prmSecItem = new SaSecurityItem.Params(); prmSecItem.IncludedIds.Add(id); prmSecItem.StatusCat = SaSecurityItem.StatusCat.Any; return GetSecurityItemCount(prmSecItem) == 1; } public override bool SecurityItemExistsByTypeCode (SaSecurity.ItemType securityItemType, string code) { ClearErrorState(); if ((int)securityItemType < 1 || StringUtil.IsEmpty(code)) return false; SaSecurityItem.Params prmSecItem = new SaSecurityItem.Params(); prmSecItem.SecurityItemType = securityItemType; prmSecItem.Code = code; prmSecItem.StatusCat = SaSecurityItem.StatusCat.Any; return GetSecurityItemCount(prmSecItem) == 1; } //------------------------------------------------------------------- // Get SecurityItem. public override SaSecurityItem GetSecurityItem (SaSecurityItem.Params prmSecItem) { return GetSecurityItem(GetSecurityItemQueryFilter(prmSecItem).Concat(" AND ", "(", ")")); } private SaSecurityItem GetSecurityItem (String filter) { ClearErrorState(); if (GetSecurityItemCount(filter) != 1) return null; SaSecurityItem securityItem = null; // Query data. using (var dbConnection = Database.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { dbConnection.Open(); SaSecItem_Db dbSecurityItem = new SaSecItem_Db(DbInfo); dbSecurityItem.PopulateFrom(dbCommand, aliasSecurityItem, filter); securityItem = CreateSecurityItem(dbSecurityItem); } catch (Exception exc) { SaLogger.Warn(GetType().Name + ".GetSecurityItem\n\tQuery: " + dbCommand.CommandText + "\n\t" + exc.GetType().Name + ": " + exc.Message); } } return securityItem; } public override SaSecurityItem GetSecurityItemById (SysId id) { ClearErrorState(); if (!SysId.IsValid(id)) return null; SaSecurityItem.Params prmSecItem = new SaSecurityItem.Params(); prmSecItem.IncludedIds.Add(id); prmSecItem.StatusCat = SaSecurityItem.StatusCat.Any; return GetSecurityItem(GetSecurityItemQueryFilter(prmSecItem).Concat(" AND ", "(", ")")); } public override SaSecurityItem GetSecurityItemByTypeCode (SaSecurity.ItemType securityItemType, string code) { ClearErrorState(); if ((int)securityItemType < 1 || StringUtil.IsEmpty(code)) return null; SaSecurityItem.Params prmSecItem = new SaSecurityItem.Params(); prmSecItem.SecurityItemType = securityItemType; prmSecItem.Code = code; prmSecItem.StatusCat = SaSecurityItem.StatusCat.Any; return GetSecurityItem(GetSecurityItemQueryFilter(prmSecItem).Concat(" AND ", "(", ")")); } //------------------------------------------------------------------- // Create item. public override SaSecurityItem CreateSecurityItem (SaSecurity.ItemType securityItemType) { ClearErrorState(); return new SaSecurityItem_Dbas(null, securityItemType, 0); } public SaSecurityItem CreateSecurityItem (SaSecItem_Db dbSecurityItem) { ClearErrorState(); SaSecurityItem securityItem = new SaSecurityItem_Dbas(new SysId(dbSecurityItem._Id), (SaSecurity.ItemType)dbSecurityItem._Type, (ushort)dbSecurityItem._Flags); PopulateFrom(dbSecurityItem, securityItem); return securityItem; } //------------------------------------------------------------------- // Validate item properties. public override bool IsValidSecurityItemData (SaSecurityItem.Data securityItemData, SaSecurityItem.ErrField errField) { ClearErrorState(); if (!base.IsValidSecurityItemData(securityItemData, errField)) return false; return true; } //------------------------------------------------------------------- // Insert item. public override bool InsertSecurityItem (SaSecurityItem securityItem, DbUpdateInfo dbUpdateInfo) { String fn = GetType().Name + ".InsertSecurityItem"; ClearErrorState(); if (!IsValidSecurityItem(securityItem)) return false; if (SysId.IsValid(securityItem.Id)) return SetErrorState(ErrorMessage.ValiditemId); using (var dbConnection = Database.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { dbConnection.Open(); SaSecItem_Db dbSecurityItem = new SaSecItem_Db(DbInfo); PopulateTo(dbSecurityItem, securityItem, dbUpdateInfo); if (SaSecItem_Db.FieldsNonId.Contains("Id")) { // Generate next Id. dbSecurityItem._Id = SysId.ToInt(Database.GetNextId("SaSecItem", dbUpdateInfo)); } dbSecurityItem.ExecuteInsertCommand(dbCommand); securityItem.Id = new SysId(dbSecurityItem._Id); securityItem.Changed = false; if (SacsSystem.DebugMode) SaLogger.Debug(fn + " Inserted.\n\tId: " + SysId.ToString(securityItem.Id) + "\n\tCode: " + securityItem.Code + "\n\tDescription: " + securityItem.Description + "\n\tStatus: " + securityItem.StatusCode); } catch (Exception exc) { SetErrorState(exc.Message); } } return !HasErrorState(); } //------------------------------------------------------------------- // Update SecurityItem. public override bool UpdateSecurityItem (SaSecurityItem securityItem, DbUpdateInfo dbUpdateInfo) { String fn = GetType().Name + ".UpdateSecurityItem"; ClearErrorState(); if (!IsValidSecurityItem(securityItem)) return false; if (!SysId.IsValid(securityItem.Id)) return SetErrorState(ErrorMessage.InvalidItemId); if (!securityItem.Changed) { if (SacsSystem.DebugMode) SaLogger.Debug(fn + " Data not changed.\n\tId: " + SysId.ToString(securityItem.Id) + "\n\tCode: " + securityItem.Code + "\n\tDescription: " + securityItem.Description + "\n\tStatus: " + securityItem.StatusCode); return true; } using (var dbConnection = Database.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { // Retrieve securityItem. dbConnection.Open(); SaSecItem_Db dbSecurityItem = new SaSecItem_Db(DbInfo); dbSecurityItem.PopulateFrom(dbCommand, aliasSecurityItem, "Id=" + SysId.ToString(securityItem.Id)); SaUpdateLogItemMonitor_SecurityItem updateLogMonitor = new SaUpdateLogItemMonitor_SecurityItem(SecurityConsole, CreateSecurityItem(dbSecurityItem), dbUpdateInfo); // Update properties. PopulateTo(dbSecurityItem, securityItem, dbUpdateInfo); dbSecurityItem.ExecuteUpdateCommand(dbCommand); securityItem.Changed = false; if (SacsSystem.DebugMode) SaLogger.Debug(fn + " Updated.\n\tId: " + SysId.ToString(securityItem.Id) + "\n\tCode: " + securityItem.Code + "\n\tDescription: " + securityItem.Description + "\n\tStatus: " + securityItem.StatusCode); // Record updates. updateLogMonitor.RecordUpdatedValues(securityItem); updateLogMonitor.LogUpdates(); } catch (Exception exc) { SetErrorState(exc.Message); } } return !HasErrorState(); } //------------------------------------------------------------------- // Delete SecurityItem. public override bool SecurityItemCanBeDeleted (SaSecurityItem securityItem) { ClearErrorState(); if (!base.SecurityItemCanBeDeleted(securityItem)) return false; return true; } public override bool DeleteSecurityItem (SaSecurityItem securityItem, DbUpdateInfo dbUpdateInfo) { String fn = GetType().Name + ".DeleteSecurityItem"; ClearErrorState(); if (!SecurityItemCanBeDeleted(securityItem)) return false; using (var dbConnection = Database.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { // Retrieve securityItem. dbConnection.Open(); SaSecItem_Db dbSecurityItem = new SaSecItem_Db(DbInfo); dbSecurityItem.PopulateFrom(dbCommand, aliasSecurityItem, "Id=" + SysId.ToString(securityItem.Id)); // Delete securityItem. dbCommand.CommandType = System.Data.CommandType.Text; dbCommand.CommandText = "DELETE FROM " + TableName_SecItem + " WHERE Id=" + SysId.ToString(securityItem.Id) + ";"; dbCommand.ExecuteNonQuery(); if (SacsSystem.DebugMode) SaLogger.Debug(fn + " Deleted.\n\tId: " + SysId.ToString(securityItem.Id) + "\n\tCode: " + securityItem.Code + "\n\tDescription: " + securityItem.Description + "\n\tStatus: " + securityItem.StatusCode); } catch (Exception exc) { SetErrorState(exc.Message); } } return !HasErrorState(); } //------------------------------------------------------------------- // Copy data properties to and from database. private void PopulateTo (SaSecItem_Db dbSecurityItem, SaSecurityItem securityItem, DbUpdateInfo dbUpdateInfo) { dbSecurityItem._Id = securityItem.Id.ToInt(); dbSecurityItem._Type = (byte)securityItem.ItemType; dbSecurityItem._EmailAddress = securityItem.EmailAddress; dbSecurityItem._Code = securityItem.Code; dbSecurityItem._Description = securityItem.Description; dbSecurityItem._Location = securityItem.Location; dbSecurityItem._EncPword = securityItem.PasswordEncrypted; dbSecurityItem._PwordSalt = securityItem.PasswordSalt; dbSecurityItem._PwordHash = securityItem.PasswordHash; dbSecurityItem._LastLogin = securityItem.LastLogin; dbSecurityItem._DataItemType = (short)securityItem.DataItemType; // Common properties. dbSecurityItem._Notes = securityItem.Notes; dbSecurityItem._Status = SacsSystem.GetStatusCode(securityItem.Status); dbSecurityItem._Flags = (short)securityItem.Flags; if (!SysId.IsValid(securityItem.Id)) { dbSecurityItem._CreateOn = DateTime.Now; dbSecurityItem._CreateBy = dbUpdateInfo.UserId.ToInt(); dbSecurityItem._CreateHost = dbUpdateInfo.Host; } dbSecurityItem._UpdateOn = DateTime.Now; dbSecurityItem._UpdateBy = dbUpdateInfo.UserId.ToInt(); dbSecurityItem._UpdateHost = dbUpdateInfo.Host; } private void PopulateFrom (SaSecItem_Db dbSecurityItem, SaSecurityItem securityItem) { //securityItem.Id = new SysId(dbSecurityItem._Id); securityItem.Code = dbSecurityItem._Code; securityItem.EmailAddress = dbSecurityItem._EmailAddress; securityItem.Description = dbSecurityItem._Description; securityItem.Location = dbSecurityItem._Location; securityItem.PasswordEncrypted = dbSecurityItem._EncPword; securityItem.PasswordSalt = dbSecurityItem._PwordSalt; securityItem.PasswordHash = dbSecurityItem._PwordHash; securityItem.LastLogin = dbSecurityItem._LastLogin; securityItem.DataItemType = dbSecurityItem._DataItemType; // Common properties. securityItem.Notes = dbSecurityItem._Notes; securityItem.Status = SacsSystem.GetStatusForCode(dbSecurityItem._Status); securityItem.SetCreateStamp(dbSecurityItem._CreateOn, new SysId(dbSecurityItem._CreateBy), dbSecurityItem._CreateHost); securityItem.SetUpdateStamp(dbSecurityItem._UpdateOn, new SysId(dbSecurityItem._UpdateBy), dbSecurityItem._UpdateHost); securityItem.AcceptChanges(); } //------------------------------------------------------------------- // SecurityItem column definitions. private static readonly String aliasSecurityItem = "aSecItm"; private static readonly String colOwnerLinkCount = "OwnerLinkCount"; private static readonly String colTargetLinkCount = "TargetLinkCount"; private static readonly String colTargetLinkCount_Groups = "TargetLinkCount_Groups"; private static readonly String colTargetLinkCount_Rights = "TargetLinkCount_Right"; private void SetSecurityItemColDfn (ColumnDfn col, String caption, int width, SaSecurityDbDfn.ColumnIdx dbCol, ColumnAlignment align = ColumnAlignment.Default, DataValue.DataType dataType = DataValue.DataType.String, String alias = "", String prefix = "") { if (String.IsNullOrEmpty(alias) && SaSecurityDbDfn.GetTableForColumn(dbCol) == SaSecurityDbDfn.TableIdx.SaSecItem) alias = aliasSecurityItem; col.Set(caption, width, (int)dbCol, prefix + SaSecurityDbDfn.GetColumnName(dbCol, false), SaSecurityDbDfn.GetColumnNameQual(dbCol, alias), dataType, align); } public override ColumnDfn GetSecurityItemColumnDfn (SaSecurityItem.Column columnId, string caption = "", int width = 0) { ColumnDfn columnDfn = new ColumnDfn((int)columnId,caption,width); switch (columnId) { case SaSecurityItem.Column.Pos: SetSecurityItemColDfn(columnDfn, "Pos", 45, SaSecurityDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right); columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off; columnDfn.ReadOnly = true; columnDfn.Resizable = false; break; case SaSecurityItem.Column.Id: SetSecurityItemColDfn(columnDfn, "Id", 60, SaSecurityDbDfn.ColumnIdx.SaSecItem_Id, ColumnAlignment.Right, DataValue.DataType.Long); columnDfn.ReadOnly = true; break; case SaSecurityItem.Column.ItemType: SetSecurityItemColDfn(columnDfn, "Type", 60, SaSecurityDbDfn.ColumnIdx.SaSecItem_Type, ColumnAlignment.Center, DataValue.DataType.Long); break; case SaSecurityItem.Column.ItemType_Desc: SetSecurityItemColDfn(columnDfn, "Type", 100, SaSecurityDbDfn.ColumnIdx.SaSecItem_Type, ColumnAlignment.Center); break; case SaSecurityItem.Column.Code: SetSecurityItemColDfn(columnDfn, "Code", 100, SaSecurityDbDfn.ColumnIdx.SaSecItem_Code); break; case SaSecurityItem.Column.Description: SetSecurityItemColDfn(columnDfn, "Caption", 120, SaSecurityDbDfn.ColumnIdx.SaSecItem_Description); break; case SaSecurityItem.Column.Location: SetSecurityItemColDfn(columnDfn, "Location", 100, SaSecurityDbDfn.ColumnIdx.SaSecItem_Location); columnDfn.NumDecimals = 3; break; case SaSecurityItem.Column.LastLogin_Date: SetSecurityItemColDfn(columnDfn, "Last login", 90, SaSecurityDbDfn.ColumnIdx.SaSecItem_LastLogin, ColumnAlignment.Center, DataValue.DataType.Date); columnDfn.ReadOnly = true; break; case SaSecurityItem.Column.OwnerLinkCount: SetSecurityItemColDfn(columnDfn, "Owner links", 90, SaSecurityDbDfn.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Long); columnDfn.DataName = colTargetLinkCount_Rights; break; case SaSecurityItem.Column.TargetLinkCount: SetSecurityItemColDfn(columnDfn, "Target links", 90, SaSecurityDbDfn.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Long); columnDfn.DataName = colTargetLinkCount; break; case SaSecurityItem.Column.TargetLinkCount_Groups: SetSecurityItemColDfn(columnDfn, "Groups", 80, SaSecurityDbDfn.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Long); columnDfn.DataName = colTargetLinkCount_Groups; break; case SaSecurityItem.Column.OwnerLinkCount_Rights: SetSecurityItemColDfn(columnDfn, "Rights", 80, SaSecurityDbDfn.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Long); columnDfn.DataName = colTargetLinkCount_Rights; break; case SaSecurityItem.Column.Notes: SetSecurityItemColDfn(columnDfn, "Notes", 240, SaSecurityDbDfn.ColumnIdx.SaSecItem_Notes); break; case SaSecurityItem.Column.Status: SetSecurityItemColDfn(columnDfn, "Status", 80, SaSecurityDbDfn.ColumnIdx.SaSecItem_Status, ColumnAlignment.Center); break; case SaSecurityItem.Column.Status_Desc: SetSecurityItemColDfn(columnDfn, "Status", 90, SaSecurityDbDfn.ColumnIdx.SaSecItem_Status, ColumnAlignment.Center); break; case SaSecurityItem.Column.Status_Ind: SetSecurityItemColDfn(columnDfn, "Status", 80, SaSecurityDbDfn.ColumnIdx.SaSecItem_Status, ColumnAlignment.Center, DataValue.DataType.TriState); columnDfn.TriStateFormat = ColumnTriStateFormat.Lights; break; case SaSecurityItem.Column.CreateOn_Date: SetSecurityItemColDfn(columnDfn, "Created", 80, SaSecurityDbDfn.ColumnIdx.SaSecItem_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date); columnDfn.ReadOnly = true; break; case SaSecurityItem.Column.UpdateOn_Date: SetSecurityItemColDfn(columnDfn, "Updated", 80, SaSecurityDbDfn.ColumnIdx.SaSecItem_UpdateOn, ColumnAlignment.Center, DataValue.DataType.Date); columnDfn.ReadOnly = true; break; } if (!String.IsNullOrEmpty(caption)) columnDfn.Caption = caption; if (width > 0) columnDfn.Width = width; return columnDfn; } //------------------------------------------------------------------- // SecurityItem query filter. public override List GetSecurityItemQueryFilter (SaSecurityItem.Params prm) { List filter = new List(); // Security Item Id. String colId = SaSecurityDbDfn.GetColumnNameQual(SaSecurityDbDfn.ColumnIdx.SaSecItem_Id, aliasSecurityItem); String includedIds = prm.IncludedIds.Concat(","); if (!includedIds.IsEmpty()) filter.Add(colId + " IN (" + includedIds + ")"); String excludedIds = prm.ExcludedIds.Concat(","); if (!excludedIds.IsEmpty()) filter.Add(colId + " NOT IN (" + excludedIds + ")"); // Item type. String colType = SaSecurityDbDfn.GetColumnNameQual(SaSecurityDbDfn.ColumnIdx.SaSecItem_Type, aliasSecurityItem); if (prm.SecurityItemType > 0) filter.Add(colType + "=" + (int)prm.SecurityItemType); // Code. String colCode = SaSecurityDbDfn.GetColumnNameQual(SaSecurityDbDfn.ColumnIdx.SaSecItem_Code, aliasSecurityItem); if (!StringUtil.IsEmpty(prm.Code)) filter.Add(colCode + "='" + DbQuery.FormatForCondition(prm.Code) + "'"); if (!StringUtil.IsEmpty(prm.CodePartial)) filter.Add(colCode + " LIKE '%" + DbQuery.FormatForLike(prm.CodePartial) + "%'"); // Email address. String colEmailAddress = SaSecurityDbDfn.GetColumnNameQual(SaSecurityDbDfn.ColumnIdx.SaSecItem_EmailAddress, aliasSecurityItem); if (!StringUtil.IsEmpty(prm.EmailAddress)) filter.Add(colEmailAddress + "='" + DbQuery.FormatForCondition(prm.EmailAddress) + "'"); if (!StringUtil.IsEmpty(prm.EmailAddressPartial)) filter.Add(colEmailAddress + " LIKE '%" + DbQuery.FormatForLike(prm.EmailAddressPartial) + "%'"); // Description. String colDesc = SaSecurityDbDfn.GetColumnNameQual(SaSecurityDbDfn.ColumnIdx.SaSecItem_Description, aliasSecurityItem); if (!StringUtil.IsEmpty(prm.Description)) filter.Add(colDesc + "='" + DbQuery.FormatForCondition(prm.Description) + "'"); if (!StringUtil.IsEmpty(prm.DescriptionPartial)) filter.Add(colDesc + " LIKE '%" + DbQuery.FormatForLike(prm.DescriptionPartial) + "%'"); // Security Groups. String includedGroupIds = prm.IncludedGroupIds.Concat(","); if (!includedGroupIds.IsEmpty()) filter.Add(colId + " IN " + "(Select " + SaSecurityDbDfn.GetColumnNameQual(SaSecurityDbDfn.ColumnIdx.SaSecLink_ItemOwner) + " FROM " + SaSecurityDbDfn.GetTableName(SaSecurityDbDfn.TableIdx.SaSecLink) + " WHERE " + SaSecurityDbDfn.GetColumnNameQual(SaSecurityDbDfn.ColumnIdx.SaSecLink_ItemTarget) + " IN (" + includedGroupIds + "))"); // Status. String colStatus = SaSecurityDbDfn.GetColumnNameQual(SaSecurityDbDfn.ColumnIdx.SaSecItem_Status, aliasSecurityItem); if (prm.StatusCat == SaSecurityItem.StatusCat.EnabledOnly) filter.Add(colStatus + " = '" + SacsSystem.GetStatusCode(SaStatus.Enabled) + "'"); else if (prm.StatusCat == SaSecurityItem.StatusCat.DisabledOnly) filter.Add(colStatus + " = '" + SacsSystem.GetStatusCode(SaStatus.Disabled) + "'"); if (filter.Count < 1 && prm.IncludeDefaultFilter) filter.Add("1=1"); return filter; } // SecurityItem sort columns. public List GetSecurityItemSortColumns (SaSecurityItem.Params prm) { // Sort sequence: List sortColumnNames = new List(); foreach (var columnDfn in prm.SortColumns) { // Need to ensure correct alias used for SecurityItem columns in case of conflict. String sortCol = String.Empty; if (SaSecurityDbDfn.GetTableForColumn((SaSecurityDbDfn.ColumnIdx)columnDfn.DbColumn) == SaSecurityDbDfn.TableIdx.SaSecItem) { sortCol = SaSecurityDbDfn.GetColumnNameQual((SaSecurityDbDfn.ColumnIdx)columnDfn.DbColumn, aliasSecurityItem); } else { sortCol = columnDfn.DataName; if (!StringUtil.IsEmpty(columnDfn.SortDataName)) { sortCol = columnDfn.SortDataName; } } if (!sortCol.IsEmpty()) { DbOrderByNullMode orderByNullMode = DbOrderByNullMode.Default; // eSaOrderByDemoteNulls, eSaOrderByPromoteNulls sortColumnNames.Add(DbQuery.FormatForOrderBy(sortCol, columnDfn.SortAscending, orderByNullMode).Concat(", ")); } } sortColumnNames.RemoveBlanks(); if (sortColumnNames.IsEmpty()) { // Default sort columns: sortColumnNames.Add(SaSecurityDbDfn.GetColumnNameQual(SaSecurityDbDfn.ColumnIdx.SaSecItem_Description, aliasSecurityItem) + " ASC"); } return sortColumnNames; } //------------------------------------------------------------------- // SecurityItem count. private long GetSecurityItemCount (String filter) { ClearErrorState(); return Database.GetRowCount(TableName_SecItem + " As " + aliasSecurityItem, filter); } public override long GetSecurityItemCount (SaSecurityItem.Params prm) { ClearErrorState(); return GetSecurityItemCount(GetSecurityItemQueryFilter(prm).Concat(" AND ", "(", ")")); } //------------------------------------------------------------------- // Security Item list. public override List GetSecurityItemList (SaSecurityItem.Params prm) { List secItems = new List(); DbQuery qry = new DbQuery(Database.DbmsType); qry.Tables.Add(TableName_SecItem, aliasSecurityItem); SaSecItem_Db dbSecurityItem = new SaSecItem_Db(DbInfo); qry.Columns.AddRange(dbSecurityItem.ExistingColumnNames); qry.Filters.AddRange(GetSecurityItemQueryFilter(prm)); qry.OrderBy.AddRange(GetSecurityItemSortColumns(prm)); // Query data. using (var dbConnection = Database.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { dbConnection.Open(); dbCommand.CommandText = qry.BuildQuery(prm.ResultsPaging); using (DbDataReader dbDataReader = dbCommand.ExecuteReader()) { while (dbDataReader.Read()) { dbSecurityItem = new SaSecItem_Db(DbInfo); dbSecurityItem.PopulateFrom(dbDataReader); SaSecurityItem secItem = CreateSecurityItem(dbSecurityItem); secItems.Add(secItem); } } } catch (Exception exc) { SaLogger.Warn(GetType().Name + ".GetSecurityItemList\n\tQuery: " + dbCommand.CommandText + "\n\t" + exc.GetType().Name + ": " + exc.Message); } } return secItems; } //------------------------------------------------------------------- // Security Item Query. public override DbResultSet ExecuteSecurityItemQuery (List columns, SaSecurityItem.Params prm) { ClearErrorState(); //--------------------------------------------------------------------- // Construct query. DbQuery query = new DbQuery(Database.DbmsType); query.Tables.Add(TableName_SecItem, aliasSecurityItem); // Add columns as defined in query list. if (columns.HasId((int)SaSecurityItem.Column.Id)) query.Columns.Add(SaSecurityDbDfn.GetColumnNameQual(SaSecurityDbDfn.ColumnIdx.SaSecItem_Id, aliasSecurityItem)); if (columns.HasId((int)SaSecurityItem.Column.ItemType) || columns.HasId((int)SaSecurityItem.Column.ItemType_Desc)) query.Columns.Add(SaSecurityDbDfn.GetColumnNameQual(SaSecurityDbDfn.ColumnIdx.SaSecItem_Type, aliasSecurityItem)); if (columns.HasId((int)SaSecurityItem.Column.Code)) query.Columns.Add(SaSecurityDbDfn.GetColumnNameQual(SaSecurityDbDfn.ColumnIdx.SaSecItem_Code, aliasSecurityItem)); if (columns.HasId((int)SaSecurityItem.Column.Description)) query.Columns.Add(SaSecurityDbDfn.GetColumnNameQual(SaSecurityDbDfn.ColumnIdx.SaSecItem_Description, aliasSecurityItem)); if (columns.HasId((int)SaSecurityItem.Column.Location)) query.Columns.Add(SaSecurityDbDfn.GetColumnNameQual(SaSecurityDbDfn.ColumnIdx.SaSecItem_Location, aliasSecurityItem)); if (columns.HasId((int)SaSecurityItem.Column.LastLogin_Date)) query.Columns.Add(SaSecurityDbDfn.GetColumnNameQual(SaSecurityDbDfn.ColumnIdx.SaSecItem_LastLogin, aliasSecurityItem)); if (columns.HasId((int)SaSecurityItem.Column.Notes)) query.Columns.Add(SaSecurityDbDfn.GetColumnNameQual(SaSecurityDbDfn.ColumnIdx.SaSecItem_Notes, aliasSecurityItem)); if (columns.HasId((int)SaSecurityItem.Column.Status) || columns.HasId((int)SaSecurityItem.Column.Status_Desc) || columns.HasId((int)SaSecurityItem.Column.Status_Ind)) query.Columns.Add(SaSecurityDbDfn.GetColumnNameQual(SaSecurityDbDfn.ColumnIdx.SaSecItem_Status, aliasSecurityItem)); if (columns.HasId((int)SaSecurityItem.Column.CreateOn_Date)) query.Columns.Add(SaSecurityDbDfn.GetColumnNameQual(SaSecurityDbDfn.ColumnIdx.SaSecItem_CreateOn, aliasSecurityItem)); if (columns.HasId((int)SaSecurityItem.Column.UpdateOn_Date)) query.Columns.Add(SaSecurityDbDfn.GetColumnNameQual(SaSecurityDbDfn.ColumnIdx.SaSecItem_UpdateOn, aliasSecurityItem)); //--------------------------------------------------------------------- // Owner link count. if (columns.HasId((int)SaSecurityItem.Column.OwnerLinkCount)) { String aliasSecLink = "SecLnk"; DbQuery querySecLink = new DbQuery(Database.DbmsType); querySecLink.Tables.Add(TableName_SecLink, aliasSecLink); querySecLink.Columns.Add("Count(*)"); querySecLink.Filters.Add(SaSecurityDbDfn.GetColumnNameQual(SaSecurityDbDfn.ColumnIdx.SaSecLink_ItemOwner, aliasSecLink) + "=" + SaSecurityDbDfn.GetColumnNameQual(SaSecurityDbDfn.ColumnIdx.SaSecItem_Id, aliasSecurityItem)); query.Columns.Add("(" + querySecLink.BuildQuery() + ")", colOwnerLinkCount); } //--------------------------------------------------------------------- // Target link count. if (columns.HasId((int)SaSecurityItem.Column.TargetLinkCount)) { String aliasSecLink = "SecLnk"; DbQuery querySecLink = new DbQuery(Database.DbmsType); querySecLink.Tables.Add(TableName_SecLink, aliasSecLink); querySecLink.Columns.Add("Count(*)"); querySecLink.Filters.Add(SaSecurityDbDfn.GetColumnNameQual(SaSecurityDbDfn.ColumnIdx.SaSecLink_ItemTarget, aliasSecLink) + "=" + SaSecurityDbDfn.GetColumnNameQual(SaSecurityDbDfn.ColumnIdx.SaSecItem_Id, aliasSecurityItem)); query.Columns.Add("(" + querySecLink.BuildQuery() + ")", colTargetLinkCount); } //--------------------------------------------------------------------- // Target link count - Groups. if (columns.HasId((int)SaSecurityItem.Column.TargetLinkCount_Groups)) { // TODO Users 'own' Group items - should be otehr way around! String aliasSecLink = "SecLnk"; String aliasSecLink_Item = "SecItmItm"; DbQuery querySecLink = new DbQuery(Database.DbmsType); querySecLink.Tables.Add(TableName_SecLink, aliasSecLink); querySecLink.Tables.Add(TableName_SecItem, aliasSecLink_Item); querySecLink.Columns.Add("Count(*)"); querySecLink.Filters.Add(SaSecurityDbDfn.GetColumnNameQual(SaSecurityDbDfn.ColumnIdx.SaSecLink_ItemOwner, aliasSecLink) + "=" + SaSecurityDbDfn.GetColumnNameQual(SaSecurityDbDfn.ColumnIdx.SaSecItem_Id, aliasSecurityItem)); querySecLink.Filters.Add(SaSecurityDbDfn.GetColumnNameQual(SaSecurityDbDfn.ColumnIdx.SaSecItem_Id, aliasSecLink_Item) + "=" + SaSecurityDbDfn.GetColumnNameQual(SaSecurityDbDfn.ColumnIdx.SaSecLink_ItemTarget, aliasSecLink)); querySecLink.Filters.Add(SaSecurityDbDfn.GetColumnNameQual(SaSecurityDbDfn.ColumnIdx.SaSecItem_Type, aliasSecLink_Item) + "=" + (int)SaSecurity.ItemType.Group); query.Columns.Add("(" + querySecLink.BuildQuery() + ")", colTargetLinkCount_Groups); } //--------------------------------------------------------------------- // Target link count - Rights. if (columns.HasId((int)SaSecurityItem.Column.OwnerLinkCount_Rights)) { String aliasSecLink = "SecLnk"; String aliasSecLink_Item = "SecItmItm"; DbQuery querySecLink = new DbQuery(Database.DbmsType); querySecLink.Tables.Add(TableName_SecLink, aliasSecLink); querySecLink.Tables.Add(TableName_SecItem, aliasSecLink_Item); querySecLink.Columns.Add("Count(*)"); querySecLink.Filters.Add(SaSecurityDbDfn.GetColumnNameQual(SaSecurityDbDfn.ColumnIdx.SaSecLink_ItemOwner, aliasSecLink) + "=" + SaSecurityDbDfn.GetColumnNameQual(SaSecurityDbDfn.ColumnIdx.SaSecItem_Id, aliasSecurityItem)); querySecLink.Filters.Add(SaSecurityDbDfn.GetColumnNameQual(SaSecurityDbDfn.ColumnIdx.SaSecItem_Id, aliasSecLink_Item) + "=" + SaSecurityDbDfn.GetColumnNameQual(SaSecurityDbDfn.ColumnIdx.SaSecLink_ItemTarget, aliasSecLink)); querySecLink.Filters.Add(SaSecurityDbDfn.GetColumnNameQual(SaSecurityDbDfn.ColumnIdx.SaSecItem_Type, aliasSecLink_Item) + "=" + (int)SaSecurity.ItemType.Right); query.Columns.Add("(" + querySecLink.BuildQuery() + ")", colTargetLinkCount_Rights); } //--------------------------------------------------------------------- // Populate filter. query.Filters.AddRange(GetSecurityItemQueryFilter(prm)); if (prm.IncludedIds.Count != 1) { // Configure sort sequence. foreach (String sortColumn in GetSecurityItemSortColumns(prm)) query.OrderBy.Add(sortColumn); } //--------------------------------------------------------------------- //return new DbResultSet_DataTableReader(Database, query.BuildQuery(prm.ResultsPaging)); return DbResultSet_DataReader.ExecuteQuery(Database, query.BuildQuery(prm.ResultsPaging)); } //------------------------------------------------------------------- } //======================================================================= }