Example #1
0
 /// <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);
     }
 }
Example #2
0
        /// <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);
        }
Example #3
0
        /// <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);
        }
Example #4
0
        /// <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);
        }
Example #5
0
        /// <summary>
        /// Установить значения прав по умолчанию
        /// </summary>
        protected void SetToDefault()
        {
            globalRights    = EntityRights.NoRights;
            uiObjRightsDict = null;

            ViewAllRight    = false;
            ControlAllRight = false;
            ConfigRight     = false;
        }
Example #6
0
        private bool TryGetEntityRight(string entityName, out EntityRightData right)
        {
            right = null;
            if (EntityRights == null || string.IsNullOrEmpty(entityName))
            {
                return(false);
            }

            return(EntityRights.TryGetValue(entityName, out right));
        }
Example #7
0
        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();
        }
Example #8
0
        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;
        }
Example #9
0
        /// <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);
                }
            }
        }
Example #10
0
        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();
        }
Example #11
0
        /// <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);
        }
Example #12
0
        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);
        }
Example #13
0
        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);
        }
Example #14
0
        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 { }
                    }
                }
            }
        }