Beispiel #1
0
        private static Dictionary <Guid, PermissionRuleSet> CalculatePermissions(CmsPageLocationNode siteStructure, ILookup <Guid, PermissionRule> allPermissions, PermissionRuleSet defaultPermissions)
        {
            Dictionary <Guid, PermissionRuleSet> newRules = new Dictionary <Guid, PermissionRuleSet>();

            var permissionsForPage = allPermissions[siteStructure.PageId].ToList();

            if (!permissionsForPage.Any())
            {
                newRules.Add(siteStructure.PageId, new PermissionRuleSet(defaultPermissions));
            }
            else
            {
                newRules.Add(siteStructure.PageId, new PermissionRuleSet(permissionsForPage));
            }

            foreach (var childNode in siteStructure.ChildNodes)
            {
                var subDict = CalculatePermissions(childNode, allPermissions, newRules[siteStructure.PageId]);
                foreach (var kvp in subDict)
                {
                    newRules.Add(kvp.Key, kvp.Value);
                }
            }
            return(newRules);
        }
Beispiel #2
0
        public void Move(CmsPage page, SitemapRelativePosition newSitemapRelativePosition)
        {
            var sqlFilter = SqlFilter.FromEntityFilter($@"{nameof(CmsPageLocationNode.PageId)} == {{{page.ContentId}}}", typeof(CmsPageLocationNode));

            var newPageLocation = Orm.FindUnversionedContent <CmsPageLocationNode>(sqlFilter).Result.SingleOrDefault();

            if (newPageLocation == null)
            {
                newPageLocation = new CmsPageLocationNode();
            }
            else
            {
                AppendToRouteHistory(page);
            }

            newPageLocation.ContentId = Guid.NewGuid();
            newPageLocation.PageId    = page.ContentId;
            newPageLocation.SiteId    = page.SiteId;

            if (newSitemapRelativePosition.ParentSitemapNodeId == null ||
                newSitemapRelativePosition.ParentSitemapNodeId == Guid.Empty)
            {
                newSitemapRelativePosition.ParentSitemapNodeId = page.SiteId;
            }

            newPageLocation.ParentNodeId = newSitemapRelativePosition.ParentSitemapNodeId.Value;


            var expressionText    = $"SiteId == {{{page.SiteId}}} && ParentNodeId == {{{newSitemapRelativePosition.ParentSitemapNodeId.Value}}}";
            var booleanExpression = By.Condition(expressionText);
            var cmsPageSql        = SqlTranslator.Build(booleanExpression, typeof(CmsPageLocationNode));

            var sitemapNodesToUpdate = Orm.FindUnversionedContent <CmsPageLocationNode>(cmsPageSql).Result;
            var collection           = sitemapNodesToUpdate.ToList();

            var insertAt = 0;

            if (null != newSitemapRelativePosition.BeforeSitemapNodeId)
            {
                var beforeNode = collection.Single(x => newSitemapRelativePosition.BeforeSitemapNodeId == x.NodeId);
                insertAt = collection.IndexOf(beforeNode);
            }
            collection.Insert(insertAt, newPageLocation);

            for (int i = 0; i < collection.Count; i++)
            {
                collection[i].Order = i;
                Orm.Save(collection[i]);
            }

            DomainEvents.Raise(new SiteStructureChanged());
        }