Exemple #1
0
        /// <summary>
        /// Метод для конфигурации всех сервисов прилоежния.
        /// </summary>
        public static void ConfigureServices()
        {
            IUnityContainer container = UnityFactory.CreateContainer();

            // Сервис аудита.
            AuditSetter.InitAuditService(BridgeToDS.GetDataService());

            // Сервис тем оформления.
            ThemeService.Current = container.Resolve <IThemeService>();

            // Настройки лукапа.
            BaseMasterEditorLookUp.ChangeLookUpSettings = FormUtils.ChangeLookUpSettings;

            // Менеджер расширенных ограничений.
            if (container.IsRegistered <IAdvLimitManager>())
            {
                AdvLimitManager.Current = container.Resolve <IAdvLimitManager>();
            }

            // Сервис настроек пользователя.
            if (container.IsRegistered <IUserSettingsService>())
            {
                UserSettingsService.Current = container.Resolve <IUserSettingsService>();
            }
            else
            {
                LogService.LogWarn("IUserSettingsService не сконфигурирован в Unity. Будет использована реализация по умолчанию.");
            }
        }
        /// <summary>
        /// Конструктор формы
        /// </summary>
        public RoleE() : base("Sec_AgentL")
        {
            _languageDef = SQLWhereLanguageDef.LanguageDef;


            Function limitIsUser = _languageDef.GetFunction(_languageDef.funcEQ, new VariableDef(_languageDef.BoolType, "IsUser"), true);
            LoadingCustomizationStruct lcsAllUsers = new LoadingCustomizationStruct(null);

            lcsAllUsers.LoadingTypes  = new[] { typeof(Agent) };
            lcsAllUsers.LimitFunction = limitIsUser;
            lcsAllUsers.View          = Information.GetView("Sec_AgentL", typeof(Agent));
            _allUsers =
                BridgeToDS.GetDataService().LoadObjects(lcsAllUsers).Cast <Agent>().ToList();


            Function limitIsRole = _languageDef.GetFunction(_languageDef.funcEQ, new VariableDef(_languageDef.BoolType, "IsRole"), true);
            LoadingCustomizationStruct lcsAllRoles = new LoadingCustomizationStruct(null);

            lcsAllRoles.LoadingTypes  = new[] { typeof(Agent) };
            lcsAllRoles.LimitFunction = limitIsRole;
            lcsAllRoles.View          = Information.GetView("Sec_RolesL", typeof(Agent));
            _allRoles =
                BridgeToDS.GetDataService().LoadObjects(lcsAllRoles).Cast <Agent>().ToList();


            Function limitIsClass = _languageDef.GetFunction(_languageDef.funcEQ, new VariableDef(_languageDef.BoolType, "IsClass"), true);
            LoadingCustomizationStruct lcsAllClasses = new LoadingCustomizationStruct(null);

            lcsAllClasses.LoadingTypes  = new[] { typeof(Subject) };
            lcsAllClasses.LimitFunction = limitIsClass;
            lcsAllClasses.View          = Information.GetView("Sec_SubjectL", typeof(Subject));
            _allClasses =
                BridgeToDS.GetDataService().LoadObjects(lcsAllClasses).Cast <Subject>().ToList();
        }
Exemple #3
0
        private void GetParentRoles(List <LinkRole> roles, View view, List <LinkRole> parentRoles)
        {
            foreach (LinkRole role in roles)
            {
                Function limitParentRoles = _languageDef.GetFunction(_languageDef.funcEQ,
                                                                     new VariableDef(_languageDef.GuidType, "Agent"),
                                                                     role.Role.__PrimaryKey);

                LoadingCustomizationStruct lcsParentRoles = new LoadingCustomizationStruct(null);
                lcsParentRoles.LoadingTypes  = new Type[] { typeof(LinkRole) };
                lcsParentRoles.LimitFunction = limitParentRoles;
                lcsParentRoles.View          = view;

                List <LinkRole> linkRoles =
                    BridgeToDS.GetDataService().LoadObjects(lcsParentRoles).Cast <LinkRole>().ToList();

                if (linkRoles.Count > 0)
                {
                    GetParentRoles(linkRoles, view, parentRoles);
                }

                parentRoles.AddRange(linkRoles);
            }
        }
        /// <summary>
        /// Вызывается самым последним в Page_Load
        /// </summary>
        protected override void Postload()
        {
            if (PK == null)
            {
                return;
            }


            Function limitByRole = _languageDef.GetFunction(_languageDef.funcEQ, new VariableDef(_languageDef.GuidType, "Role"), this.PK);

            LoadingCustomizationStruct lcsOwnUsers = new LoadingCustomizationStruct(null);

            lcsOwnUsers.LoadingTypes  = new[] { typeof(LinkRole) };
            lcsOwnUsers.LimitFunction = limitByRole;
            View usersView = Information.GetView("Sec_LinkRoleL", typeof(LinkRole));

            lcsOwnUsers.View = usersView;

            List <LinkRole> roleOwnUsers =
                BridgeToDS.GetDataService().LoadObjects(lcsOwnUsers).Cast <LinkRole>().ToList();

            if (IsPostBack)
            {
                #region Save Roles

                List <LinkRole> linkUsers = new List <LinkRole>();

                foreach (Agent user in _allUsers)
                {
                    string userKey = "User" + user.__PrimaryKey;

                    if (Request.Form.AllKeys.Any(fk => fk.Contains(userKey)))
                    {
                        LinkRole linkUser = new LinkRole();
                        linkUser.Role  = DataObject;
                        linkUser.Agent = user;

                        linkUsers.Add(linkUser);
                    }
                }

                List <LinkRole> deletedUsers = new List <LinkRole>();

                foreach (LinkRole ownUser in roleOwnUsers)
                {
                    string ownId = ownUser.Agent.__PrimaryKey.ToString();

                    LinkRole singleOrDefault =
                        linkUsers.SingleOrDefault(r => r.Agent.__PrimaryKey.ToString().Equals(ownId));

                    if (singleOrDefault != null)
                    {
                        linkUsers.Remove(singleOrDefault);
                    }
                    else
                    {
                        ownUser.SetStatus(ObjectStatus.Deleted);
                        deletedUsers.Add(ownUser);
                    }
                }

                roleOwnUsers = roleOwnUsers.Except(deletedUsers).Union(linkUsers).ToList();
                linkUsers    = linkUsers.Union(deletedUsers).ToList();

                if (linkUsers.Count > 0)
                {
                    DataObject[] dataObjects = linkUsers.Cast <DataObject>().ToArray();
                    BridgeToDS.GetDataService().UpdateObjects(ref dataObjects);
                }

                #endregion
            }

            GenerateUsersTable(roleOwnUsers);



            Function limitByAgent = _languageDef.GetFunction(_languageDef.funcEQ, new VariableDef(_languageDef.GuidType, "Agent"), this.PK);

            LoadingCustomizationStruct lcsParentRoles = new LoadingCustomizationStruct(null);
            lcsParentRoles.LoadingTypes  = new[] { typeof(LinkRole) };
            lcsParentRoles.LimitFunction = limitByAgent;
            View rolesView = Information.GetView("Sec_LinkRoleL", typeof(LinkRole));
            lcsParentRoles.View = rolesView;

            List <LinkRole> parentRoles =
                BridgeToDS.GetDataService().LoadObjects(lcsParentRoles).Cast <LinkRole>().ToList();

            Agent single = _allRoles.Single(r => r.__PrimaryKey.ToString().Equals(this.PK));
            _allRoles.Remove(single);

            if (IsPostBack)
            {
                #region Save Roles

                List <LinkRole> linkRoles = new List <LinkRole>();

                foreach (Agent role in _allRoles)
                {
                    string roleKey = "Role" + role.__PrimaryKey;

                    if (Request.Form.AllKeys.Any(fk => fk.Contains(roleKey)))
                    {
                        LinkRole linkRole = new LinkRole();
                        linkRole.Agent = DataObject;
                        linkRole.Role  = role;

                        linkRoles.Add(linkRole);
                    }
                }

                List <LinkRole> deletedRoles = new List <LinkRole>();

                foreach (LinkRole ownRole in parentRoles)
                {
                    string ownId = ownRole.Role.__PrimaryKey.ToString();

                    LinkRole singleOrDefault =
                        linkRoles.SingleOrDefault(r => r.Role.__PrimaryKey.ToString().Equals(ownId));

                    if (singleOrDefault != null)
                    {
                        linkRoles.Remove(singleOrDefault);
                    }
                    else
                    {
                        ownRole.SetStatus(ObjectStatus.Deleted);
                        deletedRoles.Add(ownRole);
                    }
                }

                parentRoles = parentRoles.Except(deletedRoles).Union(linkRoles).ToList();
                linkRoles   = linkRoles.Union(deletedRoles).ToList();

                if (linkRoles.Count > 0)
                {
                    DataObject[] dataObjects = linkRoles.Cast <DataObject>().ToArray();
                    BridgeToDS.GetDataService().UpdateObjects(ref dataObjects);
                }

                #endregion
            }

            GenerateRolesTable(parentRoles);



//            Function limitByAgent = _languageDef.GetFunction(_languageDef.funcEQ, new VariableDef(_languageDef.GuidType, "Agent"), this.PK);

            LoadingCustomizationStruct lcsOwnClasses = new LoadingCustomizationStruct(null);
            lcsOwnClasses.LoadingTypes  = new[] { typeof(Permition) };
            lcsOwnClasses.LimitFunction = limitByAgent;
            View classesView = Information.GetView("Sec_PermitionE", typeof(Permition));
            lcsOwnClasses.View = classesView;

            List <Permition> userOwnClasses =
                BridgeToDS.GetDataService().LoadObjects(lcsOwnClasses).Cast <Permition>().ToList();

            List <Permissions> permissions = new List <Permissions>();

            foreach (Subject @class in _allClasses)
            {
                Permissions u2c = new Permissions();

                u2c.ObjectId   = @class.__PrimaryKey.ToString();
                u2c.ObjectName = @class.Name;

                Permition firstOrDefault =
                    userOwnClasses.FirstOrDefault(c => c.Subject.__PrimaryKey.ToString().Equals(u2c.ObjectId));

                if (firstOrDefault != null && firstOrDefault.Access != null)
                {
                    for (int i = 0; i < firstOrDefault.Access.Count; i++)
                    {
                        Access access = firstOrDefault.Access[i];

                        switch (access.TypeAccess)
                        {
                        case tTypeAccess.Delete:
                            u2c.Delete = true;
                            break;

                        case tTypeAccess.Execute:
                            u2c.Execute = true;
                            break;

                        case tTypeAccess.Full:
                            u2c.Full = true;
                            break;

                        case tTypeAccess.Insert:
                            u2c.Insert = true;
                            break;

                        case tTypeAccess.Read:
                            u2c.Read = true;
                            break;

                        case tTypeAccess.Update:
                            u2c.Update = true;
                            break;
                        }
                    }
                }

                permissions.Add(u2c);
            }

            if (IsPostBack)
            {
                #region Save Class Permissions

                List <Permissions> list = new List <Permissions>();

                foreach (Subject @class in _allClasses)
                {
                    string fullKey    = "Full" + @class.__PrimaryKey;
                    string readKey    = "Read" + @class.__PrimaryKey;
                    string insertKey  = "Insert" + @class.__PrimaryKey;
                    string updateKey  = "Update" + @class.__PrimaryKey;
                    string deleteKey  = "Delete" + @class.__PrimaryKey;
                    string executeKey = "Execute" + @class.__PrimaryKey;

                    bool isClassPermissionsSet = false;

                    Permissions permission = new Permissions();
                    permission.ObjectId   = @class.__PrimaryKey.ToString();
                    permission.ObjectName = @class.Name;

                    if (Request.Form.AllKeys.Any(fk => fk.Contains(fullKey)))
                    {
                        permission.Full       = true;
                        isClassPermissionsSet = true;
                    }

                    if (Request.Form.AllKeys.Any(fk => fk.Contains(readKey)))
                    {
                        permission.Read       = true;
                        isClassPermissionsSet = true;
                    }

                    if (Request.Form.AllKeys.Any(fk => fk.Contains(insertKey)))
                    {
                        permission.Insert     = true;
                        isClassPermissionsSet = true;
                    }

                    if (Request.Form.AllKeys.Any(fk => fk.Contains(updateKey)))
                    {
                        permission.Update     = true;
                        isClassPermissionsSet = true;
                    }

                    if (Request.Form.AllKeys.Any(fk => fk.Contains(deleteKey)))
                    {
                        permission.Delete     = true;
                        isClassPermissionsSet = true;
                    }

                    if (Request.Form.AllKeys.Any(fk => fk.Contains(executeKey)))
                    {
                        permission.Execute    = true;
                        isClassPermissionsSet = true;
                    }

                    if (isClassPermissionsSet)
                    {
                        list.Add(permission);
                    }
                }



                List <Permissions> updatedPermissions = new List <Permissions>();
                List <Permissions> deletedPermissions = new List <Permissions>();

                foreach (Permissions p in permissions)
                {
                    Permissions singleOrDefault = list.SingleOrDefault(c => c.ObjectId.Equals(p.ObjectId));

                    if (singleOrDefault != null)
                    {
                        updatedPermissions.Add(singleOrDefault);
                        list.Remove(singleOrDefault);
                    }
                    else
                    {
                        deletedPermissions.Add(p);
                    }
                }

                List <Permissions> addedPermissions = list.Union(updatedPermissions).ToList();



                List <DataObject> deletedObjects = new List <DataObject>();
                List <DataObject> addedObjects   = new List <DataObject>();

                foreach (Permition p in userOwnClasses)
                {
                    string classId = p.Subject.__PrimaryKey.ToString();

                    if (updatedPermissions.Any(x => x.ObjectId.Equals(classId)) ||
                        deletedPermissions.Any(x => x.ObjectId.Equals(classId)))
                    {
                        p.SetStatus(ObjectStatus.Deleted);
                        deletedObjects.Add(p);
                    }
                }

                foreach (Permissions p in addedPermissions)
                {
                    Permition permission = new Permition();

                    permission.Agent   = DataObject;
                    permission.Subject = new Subject();
                    permission.Subject.SetExistObjectPrimaryKey(p.ObjectId);

                    permission.Access = new DetailArrayOfAccess(permission);

                    if (p.Delete)
                    {
                        permission.Access.Add(new Access()
                        {
                            TypeAccess = tTypeAccess.Delete
                        });
                    }

                    if (p.Execute)
                    {
                        permission.Access.Add(new Access()
                        {
                            TypeAccess = tTypeAccess.Execute
                        });
                    }

                    if (p.Full)
                    {
                        permission.Access.Add(new Access()
                        {
                            TypeAccess = tTypeAccess.Full
                        });
                    }

                    if (p.Insert)
                    {
                        permission.Access.Add(new Access()
                        {
                            TypeAccess = tTypeAccess.Insert
                        });
                    }

                    if (p.Read)
                    {
                        permission.Access.Add(new Access()
                        {
                            TypeAccess = tTypeAccess.Read
                        });
                    }

                    if (p.Update)
                    {
                        permission.Access.Add(new Access()
                        {
                            TypeAccess = tTypeAccess.Update
                        });
                    }

                    addedObjects.Add(permission);
                }

                DataObject[] dataObjects = deletedObjects.Union(addedObjects).ToArray();

                if (dataObjects.Length > 0)
                {
                    BridgeToDS.GetDataService().UpdateObjects(ref dataObjects);
                }

                #endregion
            }

            GenerateClassesTable(permissions);
        }
Exemple #5
0
 private void ServiceInit()
 {
     AuditSetter.InitAuditService(BridgeToDS.GetDataService()); // Инициализация сервиса аудита
 }