Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
 /// <summary>
 /// Конструктор по умолчанию
 /// Используется для корректной XML-де-сериализации
 /// </summary>
 public GetCurrentUserNavInfoResponse()
 {
     m_NavigationInfo = new UserNavigationInfo();
 }