/// <summary> /// Получить права пользователя на объект интерфейса /// </summary> public MainData.Right GetRight(string itfObjName) { MainData.Right right; if (Role == ServerComm.Roles.Custom) { if (rightList == null || !rightList.TryGetValue(itfObjName, out right)) { right = MainData.Right.NoRights; } } else { right = new MainData.Right(); right.CtrlRight = Role == ServerComm.Roles.Admin || Role == ServerComm.Roles.Dispatcher; right.ViewRight = right.CtrlRight || Role == ServerComm.Roles.Guest; } return(right); }
protected void btnEnter_Click(object sender, System.EventArgs e) { UserData userData = UserData.GetUserData(); bool alreadyLoggedOn = userData.LoggedOn; string errMsg = ""; if (alreadyLoggedOn || userData.Login(txtLogin.Text, txtPassword.Text, out errMsg)) { // проверка прав пользователя на выбранный набор представлений int viewSetIndex = ddlViewSet.SelectedIndex; string viewSetName = userData.ViewSettings.ViewSetList[viewSetIndex].Name; MainData.Right viewSetRight = userData.GetViewSetRight(viewSetIndex); if (viewSetRight.ViewRight) { // сохранение в cookie информации о входе пользователя if (!alreadyLoggedOn) { userData.RememberUser(Context, !chkRememberUser.Checked); } // сохранение в cookie выбранного набора представлений HttpCookie cookie = new HttpCookie("ScadaViewSet"); cookie.Value = Server.UrlEncode(viewSetName); cookie.Expires = DateTime.Now.Add(ScadaUtils.CookieExpiration); Response.SetCookie(cookie); // переход на страницу данных Response.Redirect("~/Main.aspx?viewSet=" + viewSetIndex, false); } else { errMsg = WebPhrases.NoViewSetRights; } } if (!string.IsNullOrEmpty(errMsg)) { AddShowErrorScript(string.Format(WebPhrases.UnableLogin, errMsg)); } }
/// <summary> /// Инициализировать права на представления из набора /// </summary> private void InitViewRightArr(ViewSetRight viewSetRight) { ViewSettings.ViewSet viewSet = viewSetRight.ViewSet; if (viewSet != null && viewSet.Count > 0) { bool viewSetViewRight = viewSetRight.Right.ViewRight; bool viewSetCtrlRight = viewSetRight.Right.CtrlRight; int viewCnt = viewSet.Count; MainData.Right[] viewRightArr = new MainData.Right[viewCnt]; for (int i = 0; i < viewCnt; i++) { MainData.Right right = GetRight(Path.GetFileName(viewSet[i].FileName)); viewRightArr[i].ViewRight = right.ViewRight && viewSetViewRight; viewRightArr[i].CtrlRight = right.CtrlRight && viewSetCtrlRight; } viewSetRight.ViewRightArr = viewRightArr; } }
/// <summary> /// Получить права пользователя на представление /// </summary> public MainData.Right GetViewRight(int viewSetIndex, int viewIndex) { MainData.Right right = MainData.Right.NoRights; if (viewSetRightList != null && 0 <= viewSetIndex && viewSetIndex < viewSetRightList.Count) { ViewSetRight viewSetRight = viewSetRightList[viewSetIndex]; if (viewSetRight.ViewRightArr == null) { InitViewRightArr(viewSetRight); } MainData.Right[] viewRightArr = viewSetRight.ViewRightArr; if (viewRightArr != null && 0 <= viewIndex && viewIndex < viewRightArr.Length) { right = viewRightArr[viewIndex]; } } return(right); }
/// <summary> /// Получить представление заданного типа и права на него /// </summary> public bool GetView(Type viewType, int viewSetIndex, int viewIndex, out BaseView view, out MainData.Right right) { bool result = false; view = null; right = MainData.Right.NoRights; try { if (viewSetRightList != null && 0 <= viewSetIndex && viewSetIndex < viewSetRightList.Count) { ViewSetRight viewSetRight = viewSetRightList[viewSetIndex]; ViewSettings.ViewSet viewSet = viewSetRight.ViewSet; if (viewSetRight.ViewRightArr == null) { InitViewRightArr(viewSetRight); } MainData.Right[] viewRightArr = viewSetRight.ViewRightArr; if (viewSet != null && viewRightArr != null && 0 <= viewIndex && viewIndex < viewSet.Count && viewIndex < viewRightArr.Length) { ViewSettings.ViewInfo viewInfo = viewSet[viewIndex]; right = viewRightArr[viewIndex]; // попытка получить стандартный тип представления, если тип не задан if (viewType == null) { viewType = viewInfo.GetViewType(); } if (viewType == null) { // возврат представления из кэша, если тип не задан view = viewInfo.ViewCash; return(view != null); } else if (viewInfo.Type == viewType.Name) { if (viewInfo.ViewCash != null && viewInfo.ViewCash.GetType() == viewType) { // возврат представления из кэша, // если в кэше загружено представление и его тип совпадает с заданным view = viewInfo.ViewCash; result = true; } else { // создание и загрузка нового представления view = (BaseView)Activator.CreateInstance(viewType); if (!view.StoredOnServer) { view.Path = viewInfo.FileName; } if (!view.StoredOnServer || AppData.MainData.ServerComm.ReceiveView(viewSet.Directory + viewInfo.FileName, view)) { AppData.MainData.RefreshBase(); view.BindCnlProps(AppData.MainData.CnlPropsArr); viewInfo.ViewCash = view; result = true; } } } } } } catch (Exception ex) { AppData.Log.WriteAction((Localization.UseRussian ? "Ошибка при получении представления: " : "Error getting view: ") + ex.Message, Log.ActTypes.Exception); } return(result); }
/// <summary> /// Получить представление заданного типа и права на него /// </summary> public bool GetView(Type viewType, int viewSetIndex, int viewIndex, out BaseView view, out MainData.Right right) { bool result = false; view = null; right = MainData.Right.NoRights; try { if (viewSetRightList != null && 0 <= viewSetIndex && viewSetIndex < viewSetRightList.Count) { ViewSetRight viewSetRight = viewSetRightList[viewSetIndex]; ViewSettings.ViewSet viewSet = viewSetRight.ViewSet; if (viewSetRight.ViewRightArr == null) { InitViewRightArr(viewSetRight); } MainData.Right[] viewRightArr = viewSetRight.ViewRightArr; if (viewSet != null && viewRightArr != null && 0 <= viewIndex && viewIndex < viewSet.Count && viewIndex < viewRightArr.Length) { ViewSettings.ViewInfo viewInfo = viewSet[viewIndex]; right = viewRightArr[viewIndex]; if (viewType == null) { view = viewInfo.ViewCash; return(view != null); } else if (viewInfo.Type == viewType.Name) { if (viewInfo.ViewCash != null && viewInfo.ViewCash.GetType() == viewType) { view = viewInfo.ViewCash; result = true; } else { view = (BaseView)Activator.CreateInstance(viewType); if (!view.StoredOnServer) { view.ItfObjName = Path.GetFileName(viewInfo.FileName); } if (!view.StoredOnServer || AppData.MainData.ServerComm.ReceiveView(viewSet.Directory + viewInfo.FileName, view)) { AppData.MainData.RefreshBase(); view.BindCnlProps(AppData.MainData.CnlPropsArr); viewInfo.ViewCash = view; result = true; } } } } } } catch (Exception ex) { AppData.Log.WriteAction((Localization.UseRussian ? "Ошибка при получении представления: " : "Error getting view: ") + ex.Message, Log.ActTypes.Exception); } return(result); }