/// <summary> /// Add rights for the specified object. /// </summary> private void AddObjRights(RightsByObj rightsByObj, int objNum, EntityRights entityRights) { if (!rightsByObj.ContainsKey(objNum)) { rightsByObj.Add(objNum, entityRights); } }
/// <summary> /// Gets all names of entities set in RightsCheckList attribute /// Includes entity itself if it's present in entities rights /// </summary> /// <param name="dataType"></param> /// <returns></returns> private List <string> GetEntitiesToCheck(Type dataType) { if (!_checkedEntites.TryGetValue(dataType, out var entitiesToCheck)) { foreach (var custAttr in dataType.GetCustomAttributes(false)) { if (custAttr is RightsCheckListAttribute rightsAttr) { entitiesToCheck = rightsAttr.CheckedEntities; } } if (EntityRights.ContainsKey(dataType.Name)) { if (entitiesToCheck == null) { entitiesToCheck = new List <string>(1) { dataType.Name }; } else { entitiesToCheck.Add(dataType.Name); } } _checkedEntites[dataType] = entitiesToCheck; } return(entitiesToCheck); }
/// <summary> /// Checks if there is an access to the given type /// The check perfomed, using RightsCheckList attribute /// If there is no such attribute on the given type, access is granted /// </summary> /// <exception cref="ArgumentNullException"></exception> /// <param name="dataType"></param> /// <returns></returns> public bool CanReadTypeData(Type dataType) { if (HasFullRights) { return(true); } if (dataType == null) { throw new ArgumentNullException(); } var entitiesToCheck = GetEntitiesToCheck(dataType); if (entitiesToCheck == null || entitiesToCheck.Count == 0) { return(true); } foreach (var entityName in entitiesToCheck) { if (!EntityRights.TryGetValue(entityName, out var right) || right.EntityAccessLevel == EntityAccessLevel.No) { return(false); } } return(true); }
/// <summary> /// Получить права на объекты пользовательского интерфейса по идентификатору роли /// </summary> public Dictionary <int, EntityRights> GetUiObjRights(int roleID) { Dictionary <int, EntityRights> rightsDict = new Dictionary <int, EntityRights>(); try { dataCache.RefreshBaseTables(); BaseTables baseTables = dataCache.BaseTables; lock (baseTables.SyncRoot) { BaseTables.CheckColumnsExist(baseTables.RightTable, true); DataView viewRight = baseTables.RightTable.DefaultView; viewRight.Sort = "RoleID"; foreach (DataRowView rowView in viewRight.FindRows(roleID)) { int uiObjID = (int)rowView["ItfID"]; EntityRights rights = new EntityRights((bool)rowView["ViewRight"], (bool)rowView["CtrlRight"]); rightsDict[uiObjID] = rights; } } } catch (Exception ex) { log.WriteException(ex, Localization.UseRussian ? "Ошибка при получении прав на объекты пользовательского интерфейса для роли с ид.={0}" : "Error getting access rights on user interface objects for the role with ID={0}", roleID); } return(rightsDict); }
/// <summary> /// Установить значения прав по умолчанию /// </summary> protected void SetToDefault() { globalRights = EntityRights.NoRights; uiObjRightsDict = null; ViewAllRight = false; ControlAllRight = false; ConfigRight = false; }
private bool TryGetEntityRight(string entityName, out EntityRightData right) { right = null; if (EntityRights == null || string.IsNullOrEmpty(entityName)) { return(false); } return(EntityRights.TryGetValue(entityName, out right)); }
protected void Page_Load(object sender, EventArgs e) { AppData appData = AppData.GetAppData(); UserData userData = UserData.GetUserData(); #if DEBUG debugMode = true; userData.LoginForDebug(); #endif // перевод веб-страницы Translator.TranslatePage(Page, "Scada.Web.Plugins.Scheme.WFrmScheme"); // получение ид. представления из параметров запроса viewID = Request.QueryString.GetParamAsInt("viewID"); // проверка прав на просмотр представления EntityRights rights = userData.LoggedOn ? userData.UserRights.GetUiObjRights(viewID) : EntityRights.NoRights; if (!rights.ViewRight) { Response.Redirect(UrlTemplates.NoView); } // проверка схемы на ошибки, если она уже содержится в кэше if (appData.ViewCache.GetViewFromCache(viewID) is SchemeView schemeView && schemeView.LoadErrors.Count > 0) { // удаление представления с ошибками из кэша для повторной загрузки appData.ViewCache.Cache.RemoveItem(viewID); schemeView = null; } // получение актуальной схемы из кэша или от сервера, // чтобы проверить, что представление доступно, присвоить метку и // обеспечить возможность получения данных входных каналов через API, // возможные ошибки записываются в журнал приложения schemeView = appData.ViewCache.GetView <SchemeView>(viewID); if (schemeView == null) { Response.Redirect(UrlTemplates.NoView); } else { appData.AssignStamp(schemeView); } // подготовка данных для вывода на веб-страницу compStyles = GetCompStyles(); compScripts = GetCompScripts(); refrRate = userData.WebSettings.DataRefrRate; phrases = WebUtils.DictionaryToJs("Scada.Web.Plugins.Scheme.WFrmScheme.Js"); controlRight = userData.WebSettings.CmdEnabled && rights.ControlRight; schemeOptions = new SchemeOptions(userData.WebSettings.GetOptions("Scheme")).ToJs(); }
protected void Page_Load(object sender, EventArgs e) { AppData appData = AppData.GetAppData(); UserData userData = UserData.GetUserData(); #if DEBUG debugMode = true; userData.LoginForDebug(); #endif // перевод веб-страницы Translator.TranslatePage(Page, "Scada.Web.Plugins.Scheme.WFrmScheme"); // получение ид. представления из параметров запроса viewID = Request.QueryString.GetParamAsInt("viewID"); // проверка прав на просмотр представления EntityRights rights = userData.LoggedOn ? userData.UserRights.GetUiObjRights(viewID) : EntityRights.NoRights; if (!rights.ViewRight) { Response.Redirect(UrlTemplates.NoView); } // загрузка представления в кеш, чтобы проверить, что оно доступно, присвоить метку // и обеспечить возможность получения данных входных каналов через API, // ошибка будет записана в журнал приложения SchemeView schemeView = appData.ViewCache.GetView <SchemeView>(viewID); if (schemeView == null) { Response.Redirect(UrlTemplates.NoView); } else { appData.AssignStamp(schemeView); } // подготовка данных для вывода на веб-страницу compStyles = GetCompStyles(); compScripts = GetCompScripts(); refrRate = userData.WebSettings.DataRefrRate; phrases = WebUtils.DictionaryToJs("Scada.Web.Plugins.Scheme.WFrmScheme.Js"); controlRight = userData.WebSettings.CmdEnabled && rights.ControlRight; }
/// <summary> /// Add rights for the specified role. /// </summary> private void AddRoleRights(TableIndex objRight_roleIndex, TableIndex obj_parentObjIndex, RightsByObj rightsByObj, int roleID) { // explicitly defined rights have higher priority foreach (ObjRight objRight in objRight_roleIndex.SelectItems(roleID)) { AddObjRights(rightsByObj, objRight.ObjNum, new EntityRights(objRight)); } // add rights on child objects foreach (ObjRight objRight in objRight_roleIndex.SelectItems(roleID)) { EntityRights entityRights = new EntityRights(objRight); foreach (Obj childObj in EnumerateChildObjects(obj_parentObjIndex, objRight.ObjNum)) { AddObjRights(rightsByObj, childObj.ObjNum, entityRights); } } }
protected StringBuilder sbClientScript; // the script to add to a web page protected void Page_Load(object sender, EventArgs e) { AppData appData = AppData.GetAppData(); UserData userData = UserData.GetUserData(); // translate the web page Translator.TranslatePage(Page, typeof(WFrmLanding).FullName); // получение ид. представления из параметров запроса int viewID = Request.QueryString.GetParamAsInt("viewID"); // проверка прав на просмотр представления EntityRights rights = userData.LoggedOn ? userData.UserRights.GetUiObjRights(viewID) : EntityRights.NoRights; if (!rights.ViewRight) { Response.Redirect(UrlTemplates.NoView); } // load view WebPageView webPageView = appData.ViewCache.GetView <WebPageView>(viewID); if (webPageView == null) { Response.Redirect(UrlTemplates.NoView); } appData.AssignStamp(webPageView); // set the page title Title = webPageView.Title + " - " + CommonPhrases.ProductName; // build client script sbClientScript = new StringBuilder(); sbClientScript .AppendLine($"var viewPath = '{webPageView.Path}';") .AppendLine(); }
/// <summary> /// Инициализировать только основные права пользователя, исключая права на представления и контент /// </summary> public void InitGeneralRights(int roleID) { SetToDefault(); if (roleID == BaseValues.Roles.Admin) { ViewAllRight = true; ControlAllRight = true; ConfigRight = true; } else if (roleID == BaseValues.Roles.Dispatcher) { ViewAllRight = true; ControlAllRight = true; } else if (roleID == BaseValues.Roles.Guest) { ViewAllRight = true; } globalRights = new EntityRights(ViewAllRight, ControlAllRight); }
protected void Page_Load(object sender, EventArgs e) { AppData appData = AppData.GetAppData(); UserData userData = UserData.GetUserData(); // получение ид. представления из параметров запроса int viewID = Request.QueryString.GetParamAsInt("viewID"); // проверка прав на просмотр представления EntityRights rights = userData.LoggedOn ? userData.UserRights.GetUiObjRights(viewID) : EntityRights.NoRights; if (!rights.ViewRight) { Response.Redirect(UrlTemplates.NoView); } // загрузка представления WebPageView view = appData.ViewCache.GetView <WebPageView>(viewID); // переход на соответствующую веб-страницу Response.Redirect(view == null ? UrlTemplates.NoView : view.Path); }
protected void Page_Load(object sender, EventArgs e) { AppData appData = AppData.GetAppData(); UserData userData = UserData.GetUserData(); #if DEBUG debugMode = true; userData.LoginForDebug(); #endif // перевод веб-страницы Translator.TranslatePage(Page, "Scada.Web.Plugins.Table.WFrmTable"); // получение ид. представления из параметров запроса viewID = Request.QueryString.GetParamAsInt("viewID"); // проверка прав на просмотр представления EntityRights rights = userData.LoggedOn ? userData.UserRights.GetUiObjRights(viewID) : EntityRights.NoRights; if (!rights.ViewRight) { Response.Redirect(UrlTemplates.NoView); } // загрузка представления в кэш для последующего получения данных через API TableView tableView = appData.ViewCache.GetView <TableView>(viewID); if (tableView == null) { Response.Redirect(UrlTemplates.NoView); } else { appData.AssignStamp(tableView); } // получение периода времени из cookies HttpCookie cookie = Request.Cookies["Table.TimeFrom"]; int timeFrom; if (cookie == null || !int.TryParse(cookie.Value, out timeFrom)) { timeFrom = 0; } cookie = Request.Cookies["Table.TimeTo"]; int timeTo; if (cookie == null || !int.TryParse(cookie.Value, out timeTo)) { timeTo = 23; } // подготовка данных для вывода на веб-страницу viewTitle = HttpUtility.JavaScriptStringEncode(tableView.Title); dataRefrRate = userData.WebSettings.DataRefrRate; arcRefrRate = userData.WebSettings.ArcRefrRate; phrases = WebUtils.DictionaryToJs("Scada.Web.Plugins.Table.WFrmTable.Js"); DateTime nowDT = DateTime.Now; today = string.Format("new Date({0}, {1}, {2})", nowDT.Year, nowDT.Month - 1, nowDT.Day); selTimeFromHtml = GenerateTimeSelectHtml("selTimeFrom", true, timeFrom); selTimeToHtml = GenerateTimeSelectHtml("selTimeTo", false, timeTo); bool cmdEnabled = userData.WebSettings.CmdEnabled && rights.ControlRight; tableViewHtml = GenerateTableViewHtml(tableView, cmdEnabled, timeFrom, timeTo); }
private int evNum; // номер события protected void Page_Load(object sender, EventArgs e) { appData = AppData.GetAppData(); userData = UserData.GetUserData(); // проверка входа в систему if (!userData.LoggedOn) { throw new ScadaException(WebPhrases.NotLoggedOn); } // скрытие сообщения об ошибке pnlErrMsg.HideAlert(); if (IsPostBack) { evDate = (DateTime)ViewState["EvDate"]; evNum = (int)ViewState["EvNum"]; } else { // перевод веб-страницы Translator.TranslatePage(Page, "Scada.Web.Plugins.Table.WFrmEventAck"); // получение параметров запроса и сохранение во ViewState evDate = Request.QueryString.GetParamAsDate(DateTime.Today); evNum = Request.QueryString.GetParamAsInt("evNum"); ViewState["EvDate"] = evDate; ViewState["EvNum"] = evNum; int viewID = Request.QueryString.GetParamAsInt("viewID"); // получение события EventTableLight tblEvent = appData.DataAccess.DataCache.GetEventTable(evDate); EventTableLight.Event ev = tblEvent.GetEventByNum(evNum); if (ev == null) { pnlErrMsg.ShowAlert(lblEventNotFound); btnSubmit.Enabled = false; } else { // проверка прав EntityRights rights = userData.UserRights.GetUiObjRights(viewID); if (!rights.ViewRight) { throw new ScadaException(CommonPhrases.NoRights); } if (!userData.UserRights.ViewAllRight) { BaseView view = userData.UserViews.GetView(viewID, true); if (!view.ContainsCnl(ev.CnlNum)) { throw new ScadaException(CommonPhrases.NoRights); } } btnSubmit.Visible = pnlTip.Visible = rights.ControlRight && !ev.Checked; // вывод информации по событию pnlInfo.Visible = true; DispEvent dispEvent = appData.DataAccess.GetDispEvent(ev, new DataFormatter()); lblNum.Text = dispEvent.Num.ToString(); lblTime.Text = dispEvent.Time; lblObj.Text = dispEvent.Obj; lblDev.Text = dispEvent.KP; lblCnl.Text = dispEvent.Cnl; lblText.Text = dispEvent.Text; lblAck.Text = dispEvent.Ack; lblAck.CssClass = ev.Checked ? "ack-yes" : "ack-no"; if (ev.Checked && ev.UserID > 0) { string userName = appData.DataAccess.GetUserName(ev.UserID); lblByUser.Text = string.Format(lblByUser.Text, userName); lblByUser.Visible = userName != ""; } if (dispEvent.Color != "") { try { lblNum.ForeColor = lblTime.ForeColor = lblObj.ForeColor = lblDev.ForeColor = lblCnl.ForeColor = lblText.ForeColor = ColorTranslator.FromHtml(dispEvent.Color); } catch { } } } } }