/// <summary> /// ћетод запуска операции на выполнение, <входна¤> точка операции /// ѕ≈–≈√–”∆≈ЌЌџ…, —“–ќ√ќ “»ѕ»«»–ќ¬јЌЌџ… ћ≈“ќƒ /// ¬џ«џ¬ј≈“—я яƒ–ќћ ј¬“ќћј“»„≈— » /// </summary> /// <param name="request">«апрос на выполнение операции</param> /// <param name="context"> онтекст выполнени¤ операции</param> /// <returns>–езультат выполнени¤</returns> public GetCurrentUserNavInfoResponse Execute(XRequest request, IXExecutionContext context) { // –езультат: GetCurrentUserNavInfoResponse response = new GetCurrentUserNavInfoResponse(); // —разу зададим значени¤ по умолчанию: response.NavigationInfo.ShowExpensesPanel = true; response.NavigationInfo.ExpensesPanelAutoUpdateDelay = 0; response.NavigationInfo.UseOwnStartPage = false; // ќписание пользловател¤: ITUser user = (ITUser)XSecurityManager.Instance.GetCurrentUser(); // ... если пользователь Ќ≈ аутентифицирован или если это —»—“≈ћЌџ… // —≈–¬»—, то возвращаем "пустые" данные; Web-сторона анализирует // это отдельно: if (!user.IsAuthenticated || user.IsServiceAccount) { return(response); } // #1: Ќј—“–ќ… » ѕ–ќ‘»Ћя ѕќЋ№«ќ¬ј“≈Ћя // -- если пользователь аутентифицирован // -- если это не системный сервис DomainObjectData dodUserProfile = getUserProfile(user.SystemUserID, context.Connection); if (null != dodUserProfile) { // «ачитаем значени¤ свойств объекта профил¤ и перепишем значени¤ // в объект-опсатель, но только если они отличны от NULL (иначе // будут действовать значени¤ по умолчанию, заданые выше): object oValue = dodUserProfile.GetLoadedPropValue("ShowExpensesPanel"); if (DBNull.Value != oValue) { response.NavigationInfo.ShowExpensesPanel = (bool)oValue; } oValue = dodUserProfile.GetLoadedPropValue("ExpensesPanelAutoUpdateDelay"); if (DBNull.Value != oValue) { response.NavigationInfo.ExpensesPanelAutoUpdateDelay = (int)oValue; } oValue = dodUserProfile.GetLoadedPropValue("StartPage"); if (DBNull.Value != oValue) { response.NavigationInfo.UseOwnStartPage = true; response.NavigationInfo.OwnStartPage = (StartPages)oValue; } } else { // ƒанные по "своей" странице не заданы - по умолчанию // идем на страницу "мои инциденты" response.NavigationInfo.UseOwnStartPage = true; response.NavigationInfo.OwnStartPage = StartPages.CurrentTaskList; } // #2: јЌјЋ»« ѕ–»¬»Ћ≈√»… ѕќЋ№«ќ¬ј“≈Ћя - формирование доступных элементов навигационной панели: // -- если пользователь аутентифицирован // -- если это не системный сервис // ƒобавл¤ем идентификаторы доступных элементов навигационной панели: // ...домашн¤¤ станица - доступна всегда response.NavigationInfo.UsedNavigationItems.Add(NavigationItemIDs.IT_HomePage, String.Empty); // ...иерархи¤ " лиенты-проекты" - доступна всегда response.NavigationInfo.UsedNavigationItems.Add(NavigationItemIDs.IT_CustomerActivityTree, String.Empty); // ...список проектов - доступен всегда response.NavigationInfo.UsedNavigationItems.Add(NavigationItemIDs.IT_ActivityList, String.Empty); // ...список "мои инциденты" - доступен всегда response.NavigationInfo.UsedNavigationItems.Add(NavigationItemIDs.IT_CurrentTasks, String.Empty); // ...список "поиск инцидентов" - доступен всегда response.NavigationInfo.UsedNavigationItems.Add(NavigationItemIDs.IT_IncidentList, String.Empty); // ...список "списани¤" - доступен всегда, но дл¤ разных привилегий открывает разные URL: if (user.HasPrivilege(SystemPrivilegesItem.ManageTimeLoss.Name) || user.IsUnrestricted) { response.NavigationInfo.UsedNavigationItems.Add(NavigationItemIDs.IT_TimeLossSearchingList, "x-list.aspx?OT=TimeLoss&METANAME=TimeLossSearchingListAdm"); } else { response.NavigationInfo.UsedNavigationItems.Add(NavigationItemIDs.IT_TimeLossSearchingList, "x-list.aspx?OT=TimeLoss&METANAME=TimeLossSearchingList"); } // ...отчеты - доступны всем: response.NavigationInfo.UsedNavigationItems.Add(NavigationItemIDs.IT_Reports, String.Empty); // ...иерархи¤ "структура компаний" - доступна всем: response.NavigationInfo.UsedNavigationItems.Add(NavigationItemIDs.IT_OrgStructure, String.Empty); // ...функци¤ "поиск инцидента" - доступна всем: response.NavigationInfo.UsedNavigationItems.Add(NavigationItemIDs.IT_FindIncident, String.Empty); // навигационные элементы —”“а доступны только если есть привилеги¤ "доступ в —”“" if (user.HasPrivilege(SystemPrivilegesItem.AccessIntoTMS.Name) || user.IsUnrestricted) { // ...домашн¤¤ страница —”“ response.NavigationInfo.UsedNavigationItems.Add(NavigationItemIDs.TMS_HomePage, String.Empty); // ...список тендеров response.NavigationInfo.UsedNavigationItems.Add(NavigationItemIDs.TMS_TenderList, String.Empty); } // ...административный интерфейс доступен только "неограниченному" пользователю if (user.HasPrivilege(SystemPrivilegesItem.ManageRefObjects.Name) || user.IsUnrestricted) { response.NavigationInfo.UsedNavigationItems.Add(NavigationItemIDs.IT_Administation, String.Empty); } // #3: орреци¤ стартовой страницы: если заданна¤ страница недоступна, // то сбросим указание "собственной" старотовой страницы (пользователь // попадет на "домашнюю": if (response.NavigationInfo.UseOwnStartPage) { string sOwnStartPageID = UserNavigationInfo.StartPage2NavItemID(response.NavigationInfo.OwnStartPage); if (null != sOwnStartPageID) { if (null == response.NavigationInfo.UsedNavigationItems.GetValues(sOwnStartPageID)) { sOwnStartPageID = null; } } if (null == sOwnStartPageID) { response.NavigationInfo.UseOwnStartPage = false; } } return(response); }
/// <summary> /// Конструктор по умолчанию /// Используется для корректной XML-де-сериализации /// </summary> public GetCurrentUserNavInfoResponse() { m_NavigationInfo = new UserNavigationInfo(); }