public bool IncludeChildrenSection(int parentID, enumTypeHierarchy parentType, ICollection <FreeHierarchyTreeItem> children) { var isExistsSeeDbRights = false; foreach (var section in GlobalSectionsDictionary.SectionsList.Values.Where(s => s.TypeParentHierarchy == parentType && s.ParentId == parentID)) { UserRightsForTreeObject right; if (!Manager.User.AccumulateRightsAndVerify(section, EnumObjectRightType.SeeDbObjects, HierObject.GetObjectRightType(), out right)) { continue; } isExistsSeeDbRights = true; var newItem = new FreeHierarchyTreeItem(Descriptor, section, false, string.Empty, Descriptor.GetMinIdAndDecrement(), this, true, nodeRights: right, freeHierItemType: EnumFreeHierarchyItemType.Section); children.Add(newItem); Descriptor.Tree.TryAdd(newItem.FreeHierItem_ID, newItem); newItem.Descriptor.Tree = Descriptor.Tree; newItem.LoadStaticChildren(true); } return(isExistsSeeDbRights); }
/// <summary> /// Генерация стандартного дерева ПС /// </summary> /// <returns></returns> private static ConcurrentDictionary <int, FreeHierarchyTreeItem> GenerateStandartTreePS(FreeHierarchyTreeDescriptor descriptor, bool isHideTi) { var result = new ConcurrentDictionary <int, FreeHierarchyTreeItem>(); var hiers1 = EnumClientServiceDictionary.HierLev1List.Values; var filterStatus = descriptor.FilterStatus; foreach (var item in hiers1.OrderBy(v => v.Item)) //сортируем по названию { if (item == null || (filterStatus.HasValue && (item.TIStatus & filterStatus.Value) == EnumTIStatus.None) || //Используется фильтр на дереве !IsGlobalFilterHaveItem(item)) //Глобальный фильтр { continue; } var isExistsChildSeeDbObjects = Manager.User.IsAssentRight(item, EnumObjectRightType.SeeDbObjects, null); if (!isExistsChildSeeDbObjects && //Нет собственных прав !FreeHierarchyTreePreparer.ExistsStandartChildSeeDbObjects(item, descriptor.Tree_ID ?? -101, true) //И нет дочерних объектов с правами ) { continue; } var newItem = new FreeHierarchyTreeItem(descriptor, item, false, item.Name, descriptor.GetMinIdAndDecrement(), null, true, isHideTi, item.ObjectRights, EnumFreeHierarchyItemType.HierLev1) { Descriptor = { Tree = result } }; if (newItem.IncludeObjectChildren) { isExistsChildSeeDbObjects = newItem.LoadStaticChildren(isExistsChildSeeDbObjects, isHideTi); } //У объекта нет прав на просмотр, или нет дочерних объектов на которые есть такие права //if (isExistsRight || isExistsChildSeeDbObjects) //{ result[newItem.FreeHierItem_ID] = newItem; //} //else //{ // newItem.Dispose(); //} } //if (FreeHierarchyTreeDescriptor.Sort != null) FreeHierarchyTreeDescriptor.Sort(items); //foreach (var i in items) result[i.FreeHierItem_ID] = i; return(result); }
private static ConcurrentDictionary <int, FreeHierarchyTreeItem> GenerateStandartTreeBySupplyPS(FreeHierarchyTreeDescriptor descriptor, bool isHideTi) { var items = new List <FreeHierarchyTreeItem>(); var result = new ConcurrentDictionary <int, FreeHierarchyTreeItem>(); foreach (var value in from ps in EnumClientServiceDictionary.DetailPSList join ps_sup in GlobalTreeDictionary.PowerSupply_PS_List on ps.Key equals ps_sup.PS_ID into temp from ps_t in temp.DefaultIfEmpty() where ps_t == null orderby ps.Value.Name select ps.Value) { if (!IsGlobalFilterHaveItem(value)) { continue; } UserRightsForTreeObject right; if (!Manager.User.AccumulateRightsAndVerify(value, EnumObjectRightType.SeeDbObjects, value.GetObjectRightType(), out right)) { continue; } FreeHierarchyTreeItem newItem = new FreeHierarchyTreeItem(descriptor, value, nodeName: value.Name) { FreeHierItem_ID = descriptor.GetMinIdAndDecrement(), IncludeObjectChildren = true, IsHideTi = isHideTi, FreeHierItemType = EnumFreeHierarchyItemType.PS, NodeRights = right, }; items.Add(newItem); newItem.Descriptor.Tree = result; if (newItem.IncludeObjectChildren) { newItem.LoadStaticChildren(true, isHideTi); newItem.Descriptor.NeedFindTI = true; } } if (FreeHierarchyTreeDescriptor.Sort != null) { FreeHierarchyTreeDescriptor.Sort(items); } foreach (var i in items) { result[i.FreeHierItem_ID] = i; } return(result); }
private static ConcurrentDictionary <int, FreeHierarchyTreeItem> GenerateStandartTreeSections(FreeHierarchyTreeDescriptor descriptor) { var result = new ConcurrentDictionary <int, FreeHierarchyTreeItem>(); var items = new List <FreeHierarchyTreeItem>(); HashSet <ID_TypeHierarchy> objectsHasRightDbSee = null; var hiers1 = EnumClientServiceDictionary.HierLev1List.Values; if (Manager.User != null && !Manager.User.IsAdmin) { try { //Запрашиваем права на список объектов objectsHasRightDbSee = Manager.User.UserHasRightDbSee(hiers1.Select(h1 => new ID_TypeHierarchy { ID = h1.Id, TypeHierarchy = enumTypeHierarchy.Dict_HierLev1, }).ToList()); } catch (Exception ex) { Manager.UI.ShowMessage("Ошибка запроса прав: " + ex.Message); } } foreach (var item in hiers1.OrderBy(v => v.Item)) { //Глобальный фильтр if (!IsGlobalFilterHaveItem(item)) { continue; } var minID = descriptor.GetMinIdAndDecrement(); UserRightsForTreeObject hier1Right; var isExistsRight = Manager.User.AccumulateRightsAndVerify(item, EnumObjectRightType.SeeDbObjects, null, out hier1Right); if (!isExistsRight && Manager.User != null && !Manager.User.IsAdmin && objectsHasRightDbSee != null) { //Проверяем через дочерних объектов isExistsRight = objectsHasRightDbSee.Any(o => o.ID == item.Id && o.TypeHierarchy == item.GetTypeHierarchy()); } var newItem = new FreeHierarchyTreeItem(descriptor, item, nodeName: item.Name) { FreeHierItem_ID = minID, IncludeObjectChildren = true, FreeHierItemType = EnumFreeHierarchyItemType.HierLev1, NodeRights = hier1Right }; newItem.Descriptor.Tree = result; bool isExistsChildSeeDbObjects = false; if (newItem.IncludeObjectChildren) { isExistsChildSeeDbObjects = newItem.LoadStaticChildren(isExistsRight, isLoadStatic: true); } isExistsChildSeeDbObjects = newItem.IncludeChildrenSection(item.Id, item.Type, newItem.Children) || isExistsChildSeeDbObjects || item.TIStatus.HasFlag(EnumTIStatus.Is_Section_Enabled); //У объекта нет прав на просмотр, или нет дочерних объектов на которые есть такие права if (isExistsChildSeeDbObjects) //Включаем только если есть сечения { items.Add(newItem); } else { newItem.Dispose(); } } //Сечения которые не привязаны ни к чему foreach (var section in EnumClientServiceDictionary.GetSections().Values.Where(s => s.ParentId <= 0 && s.Section_ID > 0).OrderBy(s => s.Item)) { UserRightsForTreeObject right; if (!Manager.User.AccumulateRightsAndVerify(section, EnumObjectRightType.SeeDbObjects, null, out right)) { continue; } var minID = descriptor.GetMinIdAndDecrement(); FreeHierarchyTreeItem newItem = new FreeHierarchyTreeItem(descriptor, section) { FreeHierItem_ID = minID, IncludeObjectChildren = true, NodeRights = right, FreeHierItemType = EnumFreeHierarchyItemType.Section, }; newItem.Descriptor.Tree = result; newItem.LoadStaticChildren(true); items.Add(newItem); } if (FreeHierarchyTreeDescriptor.Sort != null) { FreeHierarchyTreeDescriptor.Sort(items); } foreach (var i in items) { result[i.FreeHierItem_ID] = i; } return(result); }