Exemple #1
0
        /// <summary>
        /// ћетод запуска операции на выполнение, Ђвходна¤ї точка операции
        /// </summary>
        /// <param name="request">«апрос на выполнение операции</param>
        /// <param name="context"> онтекст выполнени¤ операции</param>
        /// <returns>–езультат выполнени¤</returns>
        /// <remarks>
        /// -- ѕ≈–≈√–”∆≈ЌЌџ…, —“–ќ√ќ “»ѕ»«»–ќ¬јЌЌџ… ћ≈“ќƒ, ¬џ«џ¬ј≈“—я яƒ–ќћ
        /// -- ѕроверка параметров запроса реализована в методе Validate запроса,
        /// который автоматически вызываетс¤ ядром при получении запроса
        /// </remarks>
        public XGetObjectsRightsResponse Execute(XGetObjectsRightsRequest request, IXExecutionContext context)
        {
            Boolean[]     objectPermissionCheckList = new Boolean[request.Permissions.Length];
            IDictionary   checkedObjects            = new HybridDictionary();
            IDictionary   checkedTypes = new Hashtable();
            XObjectRights rights;

            int nIndex = -1;
            DomainObjectDataSet dataSet = new DomainObjectDataSet(context.Connection.MetadataManager.XModel);

            foreach (XObjectPermission permission in request.Permissions)
            {
                bool bHasRight = true;

                if ((permission.Action & XObjectActionEnum.Create) == XObjectActionEnum.Create)
                {
                    if (checkedTypes.Contains(permission.TypeName))
                    {
                        bHasRight = (bool)checkedTypes[permission.TypeName];
                    }
                    else
                    {
                        bHasRight = XSecurityManager.Instance.GetRightsOnNewObject(
                            dataSet.CreateStubNew(permission.TypeName)
                            ).AllowCreate;
                        checkedTypes[permission.TypeName] = bHasRight;
                    }
                }

                if (bHasRight && (
                        ((permission.Action & XObjectActionEnum.Change) > 0) ||
                        ((permission.Action & XObjectActionEnum.Delete) > 0) ||
                        ((permission.Action & XObjectActionEnum.Read) > 0)
                        ))
                {
                    rights = (XObjectRights)checkedObjects[permission.TypeName + ":" + permission.ObjectID];
                    if (rights == null)
                    {
                        rights = XSecurityManager.Instance.GetObjectRights(
                            dataSet.GetLoadedStub(permission.TypeName, permission.ObjectID)
                            );
                        checkedObjects[permission.TypeName + ":" + permission.ObjectID] = rights;
                    }
                    bHasRight = ((permission.Action & XObjectActionEnum.Change) > 0) && rights.AllowParticalOrFullChange ||
                                ((permission.Action & XObjectActionEnum.Delete) > 0) && rights.AllowDelete ||
                                ((permission.Action & XObjectActionEnum.Read) > 0) && rights.AllowParticalOrFullRead;
                }
                // «аписываем полученный флаг в результирующий массив
                objectPermissionCheckList[++nIndex] = bHasRight;
            }

            // ‘ормируем результат операции
            return(new XGetObjectsRightsResponse(objectPermissionCheckList));
        }
Exemple #2
0
        /// <summary>
        /// Создает объект "Списание времение" на основании шаблона
        /// </summary>
        private DomainObjectData createTimeLossObject(DomainObjectDataSet dataSet, DomainObjectData template, ITUser user)
        {
            DomainObjectData xobj = dataSet.CreateStubNew("TimeLoss");

            xobj.SetUpdatedPropValue("Cause", template.GetUpdatedPropValue("Cause"));
            if (template.HasUpdatedProp("Worker"))
            {
                xobj.SetUpdatedPropValue("Worker", template.GetUpdatedPropValue("Worker"));
            }
            else
            {
                xobj.SetUpdatedPropValue("Worker", user.EmployeeID);
            }
            if (template.HasUpdatedProp("Folder"))
            {
                xobj.SetUpdatedPropValue("Folder", template.GetUpdatedPropValue("Folder"));
            }
            return(xobj);
        }
Exemple #3
0
        private XTreeMenuInfo getMenuForIncidentCategory(Guid objectID, DomainObjectDataSet dataSet, IXExecutionContext context)
        {
            // загрузим текущую категорию
            DomainObjectData xobj = dataSet.Load(context.Connection, "IncidentCategory", objectID);
            DomainObjectData xobjNew;
            XTreeMenuInfo    menu = new XTreeMenuInfo("@@Title", true);

            menu.CacheMode = XTreeMenuCacheMode.NoCache;
            menu.ExecutionHandlers.Add(new XUserCodeWeb("IncidentCategoryMenu_ExecutionHandler"));
            XMenuActionItem item;
            Guid            incidentTypeID = (Guid)xobj.GetLoadedPropValue("IncidentType");

            // —оздать (на том же уровне, в том же типе инцидента)
            xobjNew = dataSet.CreateStubNew(xobj.ObjectType);
            xobjNew.SetUpdatedPropValue("IncidentType", incidentTypeID);
            xobjNew.SetUpdatedPropValue("Parent", xobj.GetLoadedPropValue("Parent"));
            XNewObjectRights create_rights = XSecurityManager.Instance.GetRightsOnNewObject(xobjNew);

            if (create_rights.AllowCreate)
            {
                item        = menu.Items.AddActionItem("—оздать", StdActions.DoCreate);
                item.Hotkey = "VK_INS";
                item.Parameters.Add("RefreshFlags", "TRM_PARENT");
                StringBuilder bld = new StringBuilder(".IncidentType=");
                bld.Append(incidentTypeID);
                if (xobj.GetLoadedPropValue("Parent") is Guid)
                {
                    bld.Append("&.Parent=");
                    bld.Append((Guid)xobj.GetLoadedPropValue("Parent"));
                }
                item.Parameters.Add("UrlParams", bld.ToString());
            }

            // —оздать подчиненную (в том же типе инцидента)
            xobjNew = dataSet.CreateStubNew(xobj.ObjectType);
            xobjNew.SetUpdatedPropValue("IncidentType", incidentTypeID);
            xobjNew.SetUpdatedPropValue("Parent", xobj.ObjectID);
            create_rights = XSecurityManager.Instance.GetRightsOnNewObject(xobjNew);
            if (create_rights.AllowCreate)
            {
                item        = menu.Items.AddActionItem("—оздать подчиненную", StdActions.DoCreate);
                item.Hotkey = "VK_INS";
                item.Parameters.Add("RefreshFlags", "TRM_NODE+TRM_CHILDS");
                item.Parameters.Add("UrlParams", ".IncidentType=" + incidentTypeID.ToString() + "&.Parent=" + xobj.ObjectID);
            }

            XObjectRights rights = XSecurityManager.Instance.GetObjectRights(xobj);

            // –едактировать
            if (rights.AllowParticalOrFullChange)
            {
                item        = menu.Items.AddActionItem("–едактировать", StdActions.DoEdit);
                item.Hotkey = "VK_ENTER";
                item.Parameters.Add("RefreshFlags", "TRM_NODE");
                item.Default = true;
            }

            // ”далить
            if (rights.AllowDelete)
            {
                item        = menu.Items.AddActionItem("”далить", StdActions.DoDelete);
                item.Hotkey = "VK_DEL";
                item.Parameters.Add("RefreshFlags", "TRM_TREE");
            }

            // ƒл¤ некорневых - "—делать корневой"
            if (xobj.GetLoadedPropValue("Parent") is Guid)
            {
                item = menu.Items.AddActionItem("—делать корневой", "DoMakeRoot");
                item.Parameters.Add("RefreshFlags", "TRM_TREE");
            }

            // ѕеренести
            if (rights.HasPropChangeRight("Parent"))
            {
                item = menu.Items.AddActionItem("ѕеренести", "DoMoveCategory");
            }
            return(menu);
        }