/// <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); } }
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); } }
/// <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)); }
/// <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); }
/// <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); } }
/// <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); } }
/// <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); } }
/// <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); } }
/// <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); } }
/// <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); }
/// <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); } }
/// <summary> /// Проверить, что пользователь вошёл систему, и получить его права /// </summary> /// <remarks>Метод используется, если сессия не доступна</remarks> public bool CheckLoggedOn(out UserRights userRights, bool throwOnFail = true) { return(UserMonitor.CheckLoggedOn(out userRights, throwOnFail)); }