示例#1
0
        public override void Validate()
        {
            var errors = new RulesException <UserGroup>();

            base.Validate(errors);

            // Группа не может иметь родительскую группу с параллельным Worfklow
            if (ParentGroup != null && ParentGroup.UseParallelWorkflow)
            {
                errors.ErrorFor(g => g.ParentGroup, UserGroupStrings.ParentCouldntUseWorkflow);
            }

            // Если группа с параллельным Worfklow, то она не может иметь потомков
            if (UseParallelWorkflow && ChildGroups.Any())
            {
                errors.ErrorFor(g => g.UseParallelWorkflow, UserGroupStrings.GroupCouldntUseWorkflow);
            }

            // Если группа с параллельным Worfklow то проверить, не являеться ли родительская группа потомком группы Администраторы
            if (UseParallelWorkflow &&
                (
                    IsAdministrators || ParentGroup != null && ParentGroup.IsAdminDescendant
                )
                )
            {
                errors.ErrorForModel(UserGroupStrings.GroupCouldntBeAdminDescendant);
            }

            // проверка на циклы
            if (!IsNew && ParentGroup != null)
            {
                if (UserGroupRepository.IsCyclePossible(Id, ParentGroup.Id))
                {
                    errors.ErrorFor(g => g.ParentGroup, UserGroupStrings.IsGroupCycle);
                }
            }

            // Группа с параллельным Worfklow не может содержать пользователей прямо или косвенно входящих в группу Администраторы
            AdminDescendantGroupUserValidation(errors);

            // Если группа является потомком группы "Администраторы", то она не может содержать пользователей входящих в группы использующие параллельный Workflow
            WorkflowGroupUsersInAdminDescendantValidation(errors);

            // Проверка на то, что нельзя удалять встроенных пользователей из встроенной группы
            BuiltInUsersRemovingValidation(errors);

            if (!errors.IsEmpty)
            {
                throw errors;
            }
        }