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; } }