From d0b65cb60bddcb384e974922a918579a823ca77f Mon Sep 17 00:00:00 2001 From: Sebastien Ros Date: Wed, 7 Dec 2016 12:15:24 -0800 Subject: [PATCH 01/12] [Fixes #7427] Fixing Blog Post permission The SummaryAdmin was not using the dedicated permissions. The default content handler can convert to the owner variation before the blogpost handler. Fixes #7427 --- .../Security/BlogAuthorizationEventHandler.cs | 34 ++++++++++++++++--- .../Content-BlogPost.SummaryAdmin.cshtml | 16 +++++---- 2 files changed, 39 insertions(+), 11 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Security/BlogAuthorizationEventHandler.cs b/src/Orchard.Web/Modules/Orchard.Blogs/Security/BlogAuthorizationEventHandler.cs index 175551170..2be6bfb2b 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Security/BlogAuthorizationEventHandler.cs +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Security/BlogAuthorizationEventHandler.cs @@ -1,5 +1,4 @@ -using System.Web.UI.WebControls; -using Orchard.ContentManagement; +using Orchard.ContentManagement; using Orchard.ContentManagement.Aspects; using Orchard.Security; using Orchard.Security.Permissions; @@ -13,11 +12,13 @@ namespace Orchard.Blogs.Security { if (!context.Granted && context.Content.Is()) { - if (context.Permission.Name == Orchard.Core.Contents.Permissions.PublishContent.Name && context.Content.ContentItem.ContentType == "BlogPost") { + if (context.Content.ContentItem.ContentType == "BlogPost" && + BlogPostVariationExists(context.Permission)) { context.Adjusted = true; - context.Permission = Permissions.PublishBlogPost; + context.Permission = GetBlogPostVariation(context.Permission); } - else if (OwnerVariationExists(context.Permission) && + + if (OwnerVariationExists(context.Permission) && HasOwnership(context.User, context.Content)) { context.Adjusted = true; context.Permission = GetOwnerVariation(context.Permission); @@ -73,5 +74,28 @@ namespace Orchard.Blogs.Security { return null; } + + private static bool BlogPostVariationExists(Permission permission) + { + return GetBlogPostVariation(permission) != null; + } + + private static Permission GetBlogPostVariation(Permission permission) + { + if (permission.Name == Orchard.Core.Contents.Permissions.PublishContent.Name) + return Permissions.PublishBlogPost; + if (permission.Name == Orchard.Core.Contents.Permissions.PublishOwnContent.Name) + return Permissions.PublishOwnBlogPost; + if (permission.Name == Orchard.Core.Contents.Permissions.EditContent.Name) + return Permissions.EditBlogPost; + if (permission.Name == Orchard.Core.Contents.Permissions.EditOwnContent.Name) + return Permissions.EditOwnBlogPost; + if (permission.Name == Orchard.Core.Contents.Permissions.DeleteContent.Name) + return Permissions.DeleteBlogPost; + if (permission.Name == Orchard.Core.Contents.Permissions.DeleteOwnContent.Name) + return Permissions.DeleteOwnBlogPost; + + return null; + } } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Views/Content-BlogPost.SummaryAdmin.cshtml b/src/Orchard.Web/Modules/Orchard.Blogs/Views/Content-BlogPost.SummaryAdmin.cshtml index 599c9d213..4fc4086fc 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Views/Content-BlogPost.SummaryAdmin.cshtml +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Views/Content-BlogPost.SummaryAdmin.cshtml @@ -25,10 +25,12 @@ @T(" | ") if (contentItem.HasDraft()) { - @Html.Link(T("Publish Draft").Text, Url.Action("Publish", "Admin", new { area = "Contents", id = contentItem.Id, returnUrl = Request.ToUrlString() }), new { itemprop = "UnsafeUrl" }) - @T(" | ") - if (Authorizer.Authorize(Orchard.Blogs.Permissions.PublishBlogPost, contentItem)) { + @Html.Link(T("Publish Draft").Text, Url.Action("Publish", "Admin", new { area = "Contents", id = contentItem.Id, returnUrl = Request.ToUrlString() }), new { itemprop = "UnsafeUrl" }) + @T(" | ") + } + + if (Authorizer.Authorize(Permissions.PreviewContent, contentItem)) { @Html.ActionLink(T("Preview").Text, "Preview", "Item", new { area = "Contents", id = contentItem.Id }, new { }) @T(" | ") } @@ -39,9 +41,11 @@ @T(" | ") } } else { - if (contentItem.HasDraft()) { - @Html.ActionLink(T("Preview").Text, "Preview", "Item", new { area = "Contents", id = contentItem.Id }, new { }) - @T(" | ") + if (contentItem.HasDraft()) { + if (Authorizer.Authorize(Permissions.PreviewContent, contentItem)) { + @Html.ActionLink(T("Preview").Text, "Preview", "Item", new { area = "Contents", id = contentItem.Id }, new { }) + @T(" | ") + } } if (Authorizer.Authorize(Orchard.Blogs.Permissions.PublishBlogPost, contentItem)) { From 5c6dd3e34f155fd50ce99ea63c34a729ed4e072b Mon Sep 17 00:00:00 2001 From: Xceno Malloy Date: Thu, 8 Dec 2016 21:20:54 +0100 Subject: [PATCH 02/12] [Fixes: #7462] Orchard.OutputCache - Possible NRE in DefaultTagCache ctor when accessing the WorkContext (#7463) Fixes #7462 --- .../Orchard.OutputCache/Services/DefaultTagCache.cs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.OutputCache/Services/DefaultTagCache.cs b/src/Orchard.Web/Modules/Orchard.OutputCache/Services/DefaultTagCache.cs index 917b4a8e9..73979772a 100644 --- a/src/Orchard.Web/Modules/Orchard.OutputCache/Services/DefaultTagCache.cs +++ b/src/Orchard.Web/Modules/Orchard.OutputCache/Services/DefaultTagCache.cs @@ -17,11 +17,13 @@ namespace Orchard.OutputCache.Services { var key = shellSettings.Name + ":TagCache"; var workContext = workContextAccessor.GetContext(); - _dictionary = workContext.HttpContext.Cache.Get(key) as ConcurrentDictionary>; + if ( workContext != null ) { + _dictionary = workContext.HttpContext.Cache.Get(key) as ConcurrentDictionary>; - if (_dictionary == null) { - _dictionary = new ConcurrentDictionary>(StringComparer.OrdinalIgnoreCase); - workContext.HttpContext.Cache.Add(key, _dictionary, null, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.Normal, null); + if ( _dictionary == null ) { + _dictionary = new ConcurrentDictionary>(StringComparer.OrdinalIgnoreCase); + workContext.HttpContext.Cache.Add(key, _dictionary, null, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.Normal, null); + } } } From 6ab9ffc7da140ca8753ed3c4d3aa39155a2556d5 Mon Sep 17 00:00:00 2001 From: Chris Payne Date: Thu, 8 Dec 2016 20:30:42 +0000 Subject: [PATCH 03/12] [Fixes #4941] Adds Url property to dynamic menu shape (#7468) Fixes #4941 --- src/Orchard/UI/Navigation/NavigationHelper.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Orchard/UI/Navigation/NavigationHelper.cs b/src/Orchard/UI/Navigation/NavigationHelper.cs index eb0803219..3d7c577bc 100644 --- a/src/Orchard/UI/Navigation/NavigationHelper.cs +++ b/src/Orchard/UI/Navigation/NavigationHelper.cs @@ -202,6 +202,7 @@ namespace Orchard.UI.Navigation { var menuItemShape = shapeFactory.MenuItem() .Text(menuItem.Text) .IdHint(menuItem.IdHint) + .Url(menuItem.Url) .Href(menuItem.Href) .LinkToFirstChild(menuItem.LinkToFirstChild) .LocalNav(menuItem.LocalNav) @@ -231,6 +232,7 @@ namespace Orchard.UI.Navigation { var menuItemShape = shapeFactory.LocalMenuItem() .Text(menuItem.Text) .IdHint(menuItem.IdHint) + .Url(menuItem.Url) .Href(menuItem.Href) .LinkToFirstChild(menuItem.LinkToFirstChild) .LocalNav(menuItem.LocalNav) From e35b71e1dcaaf253e04ede6de9aff2af2da4e819 Mon Sep 17 00:00:00 2001 From: JOSHUA NOGALES Date: Thu, 8 Dec 2016 12:31:23 -0800 Subject: [PATCH 04/12] [Fixes #7425] Session Locator | Isolation Levels not respected in Sites.config (#7466) Fixes #7425 --- src/Orchard.Web/Config/Sites.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Orchard.Web/Config/Sites.config b/src/Orchard.Web/Config/Sites.config index 852db503e..68ff3adc7 100644 --- a/src/Orchard.Web/Config/Sites.config +++ b/src/Orchard.Web/Config/Sites.config @@ -26,8 +26,8 @@ -->