/// <summary> /// Reads all permissions from user right object table and creates bit masks and saves them /// </summary> /// <param name="tableName"></param> /// <param name="colName"></param> /// <param name="ids"></param> /// <param name="idents">if given, will be used as row id</param> private void MigrateAccessRights(IList <MigrationResult> migrationResults, string tableName, string colName, IEnumerable <Guid> ids, IEnumerable <int> idents = null) { int rowCounter = 0; sqlService.OpenConnection((connection) => { int counter = 0; foreach (var id in ids) { rowCounter++; if (rowCounter % 500 == 0) { MemAlloc.FinalizeCollectedData(); } IEnumerable <RightObject> rightObjects = null; try { rightObjects = connection.Query <RightObject>("SELECT (select Ident from ESS_MS_Intern_Groups where GroupId = ESS_MS_Intern_RightObjects.GroupId) as GroupIdent, UserIdent, RightType from ESS_MS_Intern_RightObjects where Guid = :Guid and AllowAccess = 1", new { Guid = id }); migrationResults.Add(new MigrationResult { TableName = "ESS_MS_Intern_Groups", Status = MigrationStatus.Done }); } catch (Exception ex) { migrationResults.Add(new MigrationResult { TableName = "ESS_MS_Intern_Groups", Status = MigrationStatus.Failed, Exception = ex }); } if (rightObjects == null) { continue; } var userReadIds = new List <int>(); var userWriteIds = new List <int>(); var userFullIds = new List <int>(); var groupReadIds = new List <int>(); var groupWriteIds = new List <int>(); var groupFullIds = new List <int>(); foreach (var rightObj in rightObjects) { if (rightObj.GroupIdent > 0 && rightObj.GroupIdent < 32000) { // We need to set full acccess here, because the other access types are never used... groupFullIds.Add(rightObj.GroupIdent); } if (rightObj.UserIdent > 0 && rightObj.UserIdent < 32000) { // We need to set full acccess here, because the other access types are never used... userFullIds.Add(rightObj.UserIdent); } } if (userReadIds.Count == 0 && userWriteIds.Count == 0 && userFullIds.Count == 0 && groupReadIds.Count == 0 && groupWriteIds.Count == 0 && groupFullIds.Count == 0) { continue; } userReadIds = userReadIds.Distinct().ToList(); userWriteIds = userWriteIds.Distinct().ToList(); userFullIds = userFullIds.Distinct().ToList(); groupReadIds = groupReadIds.Distinct().ToList(); groupWriteIds = groupWriteIds.Distinct().ToList(); groupFullIds = groupFullIds.Distinct().ToList(); // Sort is a void, so is not part of the method chain above. userReadIds.Sort(); userWriteIds.Sort(); userFullIds.Sort(); groupReadIds.Sort(); groupWriteIds.Sort(); groupFullIds.Sort(); var newAccessRights = new RowAccess(); if (userReadIds.Count > 0) { newAccessRights.UserReadAccess = userReadIds; } if (userWriteIds.Count > 0) { newAccessRights.UserWriteAccess = userWriteIds; } if (userFullIds.Count > 0) { newAccessRights.UserFullAccess = userFullIds; } if (groupReadIds.Count > 0) { newAccessRights.GroupReadAccess = groupReadIds; } if (groupWriteIds.Count > 0) { newAccessRights.GroupWriteAccess = groupWriteIds; } if (groupFullIds.Count > 0) { newAccessRights.GroupFullAccess = groupFullIds; } try { if (idents != null) { SetAccess(tableName, colName, idents.ElementAtOrDefault(counter), newAccessRights); } else { SetAccess(tableName, colName, id, newAccessRights); } migrationResults.Add(new MigrationResult { TableName = tableName, Status = MigrationStatus.Done }); } catch (Exception ex) { migrationResults.Add(new MigrationResult { TableName = tableName, Status = MigrationStatus.Failed, Exception = ex }); } counter++; } return(0); }); }
/// <summary> /// Creates new columns and converts all existing access rights /// </summary> public IList <MigrationResult> Migrate() { var result = new List <MigrationResult>(); #region Table Role if (AddColumns("Role")) { sqlService.OpenConnection((connection) => { try { var roleIds = connection.Query <Guid>("Select RoleId from Role order by RoleId"); MigrateAccessRights(result, "Role", "RoleId", roleIds); } catch (Exception ex) { result.Add(new MigrationResult { TableName = "Role", Status = MigrationStatus.Failed, Exception = ex }); } return(0); }); } MemAlloc.FinalizeCollectedData(); #endregion #region -ESS_DCC_StackRegister if (AddColumns("ESS_DCC_StackRegister")) { sqlService.OpenConnection((connection) => { try { var ids = connection.Query <Guid>("select RegisterGuid from ESS_DCC_StackRegister order by RegisterGuid"); MigrateAccessRights(result, "ESS_DCC_StackRegister", "RegisterGuid", ids); } catch (Exception ex) { result.Add(new MigrationResult { TableName = "ESS_DCC_StackRegister", Status = MigrationStatus.Failed, Exception = ex }); } return(0); }); } MemAlloc.FinalizeCollectedData(); #endregion #region -ESS_DCC_Structure_Stack_Register if (AddColumns("ESS_DCC_Structure_Stack_Register")) { sqlService.OpenConnection((connection) => { try { var ids = connection.Query <Guid>("select Guid from ESS_DCC_Structure_Stack_Register order by Guid"); MigrateAccessRights(result, "ESS_DCC_Structure_Stack_Register", "RegisterGuid", ids); } catch (Exception ex) { result.Add(new MigrationResult { TableName = "ESS_DCC_Structure_Stack_Register", Status = MigrationStatus.Failed, Exception = ex }); } return(0); }); } MemAlloc.FinalizeCollectedData(); #endregion #region -ESS_MS_Intern_Explorer_Directory if (AddColumns("ESS_MS_Intern_Explorer_Directory")) { sqlService.OpenConnection((connection) => { try { var directories = connection.Query <DirectoryOrFile>("SELECT Ident, ReadGuid, ReadWriteGuid, FullGuid FROM ESS_MS_Intern_Explorer_Directory Order By Ident"); MigrateAccessRights(result, "ESS_MS_Intern_Explorer_Directory", "Ident", directories.Select(x => x.ReadGuid), directories.Select(x => x.Ident)); MigrateAccessRights(result, "ESS_MS_Intern_Explorer_Directory", "Ident", directories.Select(x => x.ReadWriteGuid), directories.Select(x => x.Ident)); MigrateAccessRights(result, "ESS_MS_Intern_Explorer_Directory", "Ident", directories.Select(x => x.FullGuid), directories.Select(x => x.Ident)); } catch (Exception ex) { result.Add(new MigrationResult { TableName = "ESS_MS_Intern_Explorer_Directory", Status = MigrationStatus.Failed, Exception = ex }); } return(0); }); } MemAlloc.FinalizeCollectedData(); #endregion #region -ESS_MS_Intern_Explorer_File if (AddColumns("ESS_MS_Intern_Explorer_File")) { sqlService.OpenConnection((connection) => { try { var files = connection.Query <DirectoryOrFile>("SELECT Ident, ReadGuid, ReadWriteGuid, FullGuid FROM ESS_MS_Intern_Explorer_File Order By Ident"); MigrateAccessRights(result, "ESS_MS_Intern_Explorer_File", "Ident", files.Select(x => x.ReadGuid), files.Select(x => x.Ident)); MigrateAccessRights(result, "ESS_MS_Intern_Explorer_File", "Ident", files.Select(x => x.ReadWriteGuid), files.Select(x => x.Ident)); MigrateAccessRights(result, "ESS_MS_Intern_Explorer_File", "Ident", files.Select(x => x.FullGuid), files.Select(x => x.Ident)); } catch (Exception ex) { result.Add(new MigrationResult { TableName = "ESS_MS_Intern_Explorer_File", Status = MigrationStatus.Failed, Exception = ex }); } return(0); }); } MemAlloc.FinalizeCollectedData(); #endregion #region -ESS_MS_Intern_Page if (AddColumns("ESS_MS_Intern_Page")) { sqlService.OpenConnection((connection) => { try { var ids = connection.Query <Guid>("select Guid from ESS_MS_Intern_Page order by Guid"); MigrateAccessRights(result, "ESS_MS_Intern_Page", "Guid", ids); } catch (Exception ex) { result.Add(new MigrationResult { TableName = "ESS_MS_Intern_Page", Status = MigrationStatus.Failed, Exception = ex }); } return(0); }); } MemAlloc.FinalizeCollectedData(); #endregion #region UI_Grid_Menu if (AddColumns("UI_Grid_Menu")) { sqlService.OpenConnection((connection) => { try { var ids = connection.Query <Guid>("select Id from UI_Grid_Menu order by Id"); MigrateAccessRights(result, "UI_Grid_Menu", "Id", ids); } catch (Exception ex) { result.Add(new MigrationResult { TableName = "UI_Grid_Menu", Status = MigrationStatus.Failed, Exception = ex }); } return(0); }); } MemAlloc.FinalizeCollectedData(); #endregion #region -ESS_DCC_Stack if (AddColumns("ESS_DCC_Stack")) { sqlService.OpenConnection((connection) => { try { var ids = connection.Query <Guid>("select Guid from ESS_DCC_Stack order by Guid"); MigrateAccessRights(result, "ESS_DCC_Stack", "Guid", ids); } catch (Exception ex) { result.Add(new MigrationResult { TableName = "ESS_DCC_Stack", Status = MigrationStatus.Failed, Exception = ex }); } return(0); }); } MemAlloc.FinalizeCollectedData(); #endregion #region -ESS_DCC_Stack - TableNames // get tables from stack foreach (var tbl in GetTablesFromStack()) { sqlService.OpenConnection((connection) => { IEnumerable <Guid> ids = null; if (AddColumns(tbl)) { try { ids = connection.Query <Guid>($"select Guid from {tbl} order by Guid"); MigrateAccessRights(result, tbl, "Guid", ids); } catch (Exception ex) { result.Add(new MigrationResult { TableName = tbl, Status = MigrationStatus.Failed, Exception = ex }); } } MemAlloc.FinalizeCollectedData(); try { if (AddColumns($"{tbl}_Classification_Configuration")) { ids = connection.Query <Guid>($"select Guid from {tbl}_Classification_Configuration order by Guid"); MigrateAccessRights(result, $"{tbl}_Classification_Configuration", "Guid", ids); } } catch (Exception ex) { result.Add(new MigrationResult { TableName = $"{tbl}_Classification_Configuration", Status = MigrationStatus.Failed, Exception = ex }); } MemAlloc.FinalizeCollectedData(); return(0); }); } #endregion return(result); }