Esempio n. 1
0
        /// <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);
            });
        }
Esempio n. 2
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);
        }