Exemple #1
0
        /// <summary>
        /// Получить множество номеров каналов из условий запроса с проверкой прав
        /// </summary>
        private HashSet <int> GetCnlSet(string cnlNums, string viewIDs, int viewID, UserRights userRights)
        {
            if (!string.IsNullOrWhiteSpace(cnlNums))
            {
                if (!userRights.ViewAllRight)
                {
                    int[] cnlNumArr = WebUtils.QueryParamToIntArray(cnlNums);
                    int[] viewIDArr = WebUtils.QueryParamToIntArray(viewIDs);

                    if (!userRights.CheckInCnlRights(cnlNumArr, viewIDArr))
                    {
                        throw new ScadaException(CommonPhrases.NoRights);
                    }
                }

                return(WebUtils.QueryParamToIntSet(cnlNums));
            }
            else if (viewID > 0)
            {
                BaseView view = GetViewFromCache(viewID, userRights);
                return(view.CnlSet);
            }
            else
            {
                return(null);
            }
        }
Exemple #2
0
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                AppData  appData  = AppData.GetAppData();
                UserData userData = UserData.GetUserData();
                userData.CheckLoggedOn(true);

                // получение ид. пользователя из параметров запроса
                int userID;
                if (!int.TryParse(Request.QueryString["userID"], out userID))
                {
                    userID = userData.UserProps.UserID;
                }

                // проверка прав
                bool self = userData.UserProps.UserID == userID;
                if (!(self || userData.UserRights.ConfigRight))
                {
                    throw new ScadaException(CommonPhrases.NoRights);
                }

                // перевод веб-страницы
                Translator.TranslatePage(this, "Scada.Web.WFrmUser");

                // получение свойств и прав пользователя
                UserProps  userProps;
                UserRights userRights;

                if (self)
                {
                    userProps  = userData.UserProps;
                    userRights = userData.UserRights;
                }
                else
                {
                    userProps = appData.DataAccess.GetUserProps(userID);

                    if (userProps == null)
                    {
                        throw new ScadaException(Localization.UseRussian ?
                                                 "Пользователь не найден" :
                                                 "User not found");
                    }
                    else
                    {
                        userRights = new UserRights();
                        userRights.InitGeneralRights(userProps.RoleID);
                    }
                }

                // вывод информации на форму
                lblUserName.Text = userProps.UserName;
                lblRoleName.Text = userProps.RoleName;

                lblViewAllRight.Text    = RightToStr(userRights.ViewAllRight);
                lblControlAllRight.Text = RightToStr(userRights.ControlAllRight);
                lblConfigRight.Text     = RightToStr(userRights.ConfigRight);
            }
        }
Exemple #3
0
        /// <summary>
        /// Получить представление из кеша с проверкой прав на него
        /// </summary>
        private BaseView GetViewFromCache(int viewID, UserRights userRights)
        {
            if (!userRights.GetUiObjRights(viewID).ViewRight)
            {
                throw new ScadaException(CommonPhrases.NoRights);
            }

            return(AppData.ViewCache.GetViewFromCache(viewID, true));
        }
Exemple #4
0
        /// <summary>
        /// Выполнить вход пользователя в систему
        /// </summary>
        /// <remarks>Если пароль равен null, то он не проверяется</remarks>
        public bool Login(string username, string password, out string errMsg)
        {
            username = username == null ? "" : username.Trim();
            AppData.Refresh();

            if (AppData.CheckUser(username, password, password != null, out int roleID, out errMsg))
            {
                LoggedOn = true;
                LogonDT  = DateTime.Now;

                // заполнение свойств пользователя
                UserProps = new UserProps()
                {
                    UserID   = AppData.DataAccess.GetUserID(username),
                    UserName = username,
                    RoleID   = roleID,
                    RoleName = AppData.DataAccess.GetRoleName(roleID)
                };

                if (password == null)
                {
                    AppData.Log.WriteAction(string.Format(Localization.UseRussian ?
                                                          "Вход в систему без пароля: {0} ({1}). IP-адрес: {2}" :
                                                          "Login without a password: {0} ({1}). IP address: {2}",
                                                          username, UserProps.RoleName, IpAddress));
                }
                else
                {
                    AppData.Log.WriteAction(string.Format(Localization.UseRussian ?
                                                          "Вход в систему: {0} ({1}). IP-адрес: {2}" :
                                                          "Login: {0} ({1}). IP address: {2}",
                                                          username, UserProps.RoleName, IpAddress));
                }

                UserRights userRights = new UserRights(AppData.ViewCache);
                userRights.Init(roleID, AppData.DataAccess);
                UserRights = userRights;

                AppData.UserMonitor.AddUser(this);
                StartPage = AppData.WebSettings.StartPage; // set start page by default
                UpdateAppDataRefs();
                RaiseOnUserLogin();

                UserMenu = new UserMenu(AppData.Log);
                UserMenu.Init(this);
                UserViews = new UserViews(AppData.ViewCache, AppData.Log);
                UserViews.Init(this, AppData.DataAccess);
                UserContent = new UserContent(AppData.Log);
                UserContent.Init(this, AppData.DataAccess);
                return(true);
            }
Exemple #5
0
 /// <summary>
 /// Проверить, что пользователь вошёл систему, и получить его права
 /// </summary>
 public bool CheckLoggedOn(out UserRights userRights, bool throwOnFail = true)
 {
     if (UserIsLoggedOn(WebOperationContext.Current, out userRights))
     {
         return(true);
     }
     else if (throwOnFail)
     {
         throw new ScadaException(WebPhrases.NotLoggedOn);
     }
     else
     {
         return(false);
     }
 }
Exemple #6
0
        /// <summary>
        /// Проверить, что пользователь вошёл в систему, и получить его права
        /// </summary>
        public bool UserIsLoggedOn(WebOperationContext webOpContext, out UserRights userRights)
        {
            UserData userData;

            if (TryGetUserData(webOpContext, out userData) && userData.LoggedOn && userData.UserRights != null)
            {
                userRights = userData.UserRights;
                return(userData.LoggedOn); // свойство могло измениться в другом потоке
            }
            else
            {
                userRights = null;
                return(false);
            }
        }
Exemple #7
0
        /// <summary>
        /// Проверить, что пользователь вошёл в систему, и получить его права
        /// </summary>
        public bool UserIsLoggedOn(WebOperationContext webOpContext, out UserRights userRights)
        {
            UserData userData;

            if (TryGetUserData(webOpContext, out userData) && userData.LoggedOn && userData.UserRights != null)
            {
                userRights = userData.UserRights;
                return(true);
            }
            else
            {
                userRights = null;
                return(false);
            }
        }
Exemple #8
0
        /// <summary>
        /// Выполнить вход пользователя в систему
        /// </summary>
        /// <remarks>Если пароль равен null, то он не проверяется</remarks>
        public bool Login(string username, string password, out string errMsg)
        {
            username = username == null ? "" : username.Trim();
            int roleID;

            if (AppData.CheckUser(username, password, password != null, out roleID, out errMsg))
            {
                // заполнение свойств пользователя
                UserName = username;
                UserID   = AppData.DataAccess.GetUserID(username);
                RoleID   = roleID;
                RoleName = AppData.DataAccess.GetRoleName(RoleID);
                LoggedOn = true;
                LogonDT  = DateTime.Now;

                if (password == null)
                {
                    AppData.Log.WriteAction(string.Format(Localization.UseRussian ?
                                                          "Вход в систему без пароля: {0} ({1}). IP-адрес: {2}" :
                                                          "Login without a password: {0} ({1}). IP address: {2}",
                                                          username, RoleName, IpAddress));
                }
                else
                {
                    AppData.Log.WriteAction(string.Format(Localization.UseRussian ?
                                                          "Вход в систему: {0} ({1}). IP-адрес: {2}" :
                                                          "Login: {0} ({1}). IP address: {2}",
                                                          username, RoleName, IpAddress));
                }

                UpdateAppDataRefs();
                UserRights = new UserRights();
                UserRights.Init(roleID);
                RaiseOnUserLogin();
                UserMenu = new UserMenu(AppData.Log);
                UserMenu.Init(this, PluginSpecs);
                return(true);
            }
            else
            {
                Logout();
                AppData.Log.WriteError(string.Format(Localization.UseRussian ?
                                                     "Неудачная попытка входа в систему: {0}{1}. IP-адрес: {2}" :
                                                     "Unsuccessful login attempt: {0}{1}. IP address: {2}",
                                                     username == "" ? "" : username + " - ", errMsg, IpAddress));
                return(false);
            }
        }
Exemple #9
0
 /// <summary>
 /// Получить список номеров каналов из условий запроса с проверкой прав
 /// </summary>
 private IList <int> GetCnlList(string cnlNums, int viewID, UserRights userRights)
 {
     if (!string.IsNullOrWhiteSpace(cnlNums))
     {
         if (!userRights.ViewAllRight)
         {
             throw new ScadaException(CommonPhrases.NoRights);
         }
         return(WebUtils.QueryParamToIntArray(cnlNums));
     }
     else if (viewID > 0)
     {
         BaseView view = GetViewFromCache(viewID, userRights);
         return(view.CnlList);
     }
     else
     {
         return(null);
     }
 }
Exemple #10
0
        /// <summary>
        /// Проверить, что пользователь вошёл в систему, и получить его права
        /// </summary>
        public bool UserIsLoggedOn(WebOperationContext webOpContext, out UserRights userRights)
        {
            const string msg = "Web operation context or its properties are undefined.";

            if (webOpContext == null)
            {
                throw new ArgumentNullException("webOpContext", msg);
            }
            if (webOpContext.IncomingRequest == null)
            {
                throw new ArgumentNullException("webOpContext.IncomingRequest", msg);
            }

            try
            {
                string cookieHeader = webOpContext.IncomingRequest.Headers[HttpRequestHeader.Cookie];
                string sessionID    = ExtractSessionID(cookieHeader);

                if (sessionID != null)
                {
                    lock (userDataDict)
                    {
                        UserData userData;
                        if (userDataDict.TryGetValue(sessionID, out userData))
                        {
                            userRights = userData.UserRights;
                            return(userData.LoggedOn && userRights != null);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                log.WriteException(ex, Localization.UseRussian ?
                                   "Ошибка при проверке того, что пользователь вошел в систему" :
                                   "Error checking that a user is logged on");
            }

            userRights = null;
            return(false);
        }
Exemple #11
0
        /// <summary>
        /// Получить список номеров каналов из условий запроса с проверкой прав
        /// </summary>
        private IList <int> GetCnlList(string cnlNums, string viewIDs, int viewID, UserRights userRights)
        {
            if (!string.IsNullOrWhiteSpace(cnlNums))
            {
                int[] cnlNumArr = ScadaUtils.ParseIntArray(cnlNums);
                int[] viewIDArr = ScadaUtils.ParseIntArray(viewIDs);

                if (!userRights.CheckInCnlRights(cnlNumArr, viewIDArr))
                {
                    throw new ScadaException(CommonPhrases.NoRights);
                }

                return(cnlNumArr);
            }
            else if (viewID > 0)
            {
                BaseView view = GetViewFromCache(viewID, userRights);
                return(view.CnlList);
            }
            else
            {
                return(null);
            }
        }
Exemple #12
0
 /// <summary>
 /// Проверить, что пользователь вошёл систему, и получить его права
 /// </summary>
 /// <remarks>Метод используется, если сессия не доступна</remarks>
 public bool CheckLoggedOn(out UserRights userRights, bool throwOnFail = true)
 {
     return(UserMonitor.CheckLoggedOn(out userRights, throwOnFail));
 }