diff --git a/src/Umbraco.Core/Services/UserService.cs b/src/Umbraco.Core/Services/UserService.cs index 7c6f9e3c59..64dfc8f601 100644 --- a/src/Umbraco.Core/Services/UserService.cs +++ b/src/Umbraco.Core/Services/UserService.cs @@ -747,11 +747,24 @@ namespace Umbraco.Core.Services var missingIds = nodeIds.Except(result.Select(x => x.EntityId)); foreach (var id in missingIds) { - result.Add( - new EntityPermission( - user.Id, - id, - user.DefaultPermissions.ToArray())); + if (id == -1 && user.DefaultPermissions.Any() == false) + { + // exception to everything. If default cruds is empty and we're on root node; allow browse of root node + result.Add( + new EntityPermission( + user.Id, + id, + user.DefaultPermissions.ToArray())); + } + else + { + //use the user's user type permissions + result.Add( + new EntityPermission( + user.Id, + id, + user.DefaultPermissions.ToArray())); + } } return result; diff --git a/src/Umbraco.Core/Services/UserServiceExtensions.cs b/src/Umbraco.Core/Services/UserServiceExtensions.cs index afb679afa1..b78d66cbf5 100644 --- a/src/Umbraco.Core/Services/UserServiceExtensions.cs +++ b/src/Umbraco.Core/Services/UserServiceExtensions.cs @@ -1,4 +1,5 @@ using System; +using System.Linq; using System.Web.Security; using Umbraco.Core.Models.Membership; @@ -6,6 +7,18 @@ namespace Umbraco.Core.Services { internal static class UserServiceExtensions { + public static EntityPermission GetPermissions(this IUserService userService, IUser user, string path) + { + var ids = path.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries) + .Select(x => x.TryConvertTo()) + .Where(x => x.Success) + .Select(x => x.Result) + .ToArray(); + if (ids.Length == 0) throw new InvalidOperationException("The path: " + path + " could not be parsed into an array of integers or the path was empty"); + + return userService.GetPermissions(user, ids[ids.Length - 1]).FirstOrDefault(); + } + /// /// Remove all permissions for this user for all nodes specified /// diff --git a/src/Umbraco.Tests/Cache/PublishedCache/PublishedMediaCacheTests.cs b/src/Umbraco.Tests/Cache/PublishedCache/PublishedMediaCacheTests.cs index c2b4934de9..87aaa3d84a 100644 --- a/src/Umbraco.Tests/Cache/PublishedCache/PublishedMediaCacheTests.cs +++ b/src/Umbraco.Tests/Cache/PublishedCache/PublishedMediaCacheTests.cs @@ -37,8 +37,8 @@ namespace Umbraco.Tests.Cache.PublishedCache [Test] public void Get_Root_Docs() { - var user = new User(0); - var mType = global::umbraco.cms.businesslogic.media.MediaType.MakeNew(user, "TestMediaType"); + var user = ServiceContext.UserService.GetUserById(0); + var mType = global::umbraco.cms.businesslogic.media.MediaType.MakeNew(user, "TestMediaType"); var mRoot1 = global::umbraco.cms.businesslogic.media.Media.MakeNew("MediaRoot1", mType, user, -1); var mRoot2 = global::umbraco.cms.businesslogic.media.Media.MakeNew("MediaRoot2", mType, user, -1); var mChild1 = global::umbraco.cms.businesslogic.media.Media.MakeNew("Child1", mType, user, mRoot1.Id); @@ -55,8 +55,8 @@ namespace Umbraco.Tests.Cache.PublishedCache [Test] public void Get_Item_Without_Examine() { - var user = new User(0); - var mType = global::umbraco.cms.businesslogic.media.MediaType.MakeNew(user, "TestMediaType"); + var user = ServiceContext.UserService.GetUserById(0); + var mType = global::umbraco.cms.businesslogic.media.MediaType.MakeNew(user, "TestMediaType"); var mRoot = global::umbraco.cms.businesslogic.media.Media.MakeNew("MediaRoot", mType, user, -1); var mChild1 = global::umbraco.cms.businesslogic.media.Media.MakeNew("Child1", mType, user, mRoot.Id); var publishedMedia = PublishedMediaTests.GetNode(mRoot.Id, GetUmbracoContext("/test", 1234)); diff --git a/src/Umbraco.Tests/PublishedContent/PublishedMediaTests.cs b/src/Umbraco.Tests/PublishedContent/PublishedMediaTests.cs index 379832518a..ff59bac94a 100644 --- a/src/Umbraco.Tests/PublishedContent/PublishedMediaTests.cs +++ b/src/Umbraco.Tests/PublishedContent/PublishedMediaTests.cs @@ -292,7 +292,7 @@ namespace Umbraco.Tests.PublishedContent [Test] public void Children_Without_Examine() { - var user = new User(0); + var user = ServiceContext.UserService.GetUserById(0); var mType = global::umbraco.cms.businesslogic.media.MediaType.MakeNew(user, "TestMediaType"); var mRoot = global::umbraco.cms.businesslogic.media.Media.MakeNew("MediaRoot", mType, user, -1); @@ -316,7 +316,7 @@ namespace Umbraco.Tests.PublishedContent [Test] public void Descendants_Without_Examine() { - var user = new User(0); + var user = ServiceContext.UserService.GetUserById(0); var mType = global::umbraco.cms.businesslogic.media.MediaType.MakeNew(user, "TestMediaType"); var mRoot = global::umbraco.cms.businesslogic.media.Media.MakeNew("MediaRoot", mType, user, -1); @@ -340,7 +340,7 @@ namespace Umbraco.Tests.PublishedContent [Test] public void DescendantsOrSelf_Without_Examine() { - var user = new User(0); + var user = ServiceContext.UserService.GetUserById(0); var mType = global::umbraco.cms.businesslogic.media.MediaType.MakeNew(user, "TestMediaType"); var mRoot = global::umbraco.cms.businesslogic.media.Media.MakeNew("MediaRoot", mType, user, -1); @@ -366,7 +366,7 @@ namespace Umbraco.Tests.PublishedContent [Test] public void Parent_Without_Examine() { - var user = new User(0); + var user = ServiceContext.UserService.GetUserById(0); var mType = global::umbraco.cms.businesslogic.media.MediaType.MakeNew(user, "TestMediaType"); var mRoot = global::umbraco.cms.businesslogic.media.Media.MakeNew("MediaRoot", mType, user, -1); @@ -391,7 +391,7 @@ namespace Umbraco.Tests.PublishedContent [Test] public void Ancestors_Without_Examine() { - var user = new User(0); + var user = ServiceContext.UserService.GetUserById(0); var mType = global::umbraco.cms.businesslogic.media.MediaType.MakeNew(user, "TestMediaType"); var mRoot = global::umbraco.cms.businesslogic.media.Media.MakeNew("MediaRoot", mType, user, -1); @@ -410,7 +410,7 @@ namespace Umbraco.Tests.PublishedContent [Test] public void AncestorsOrSelf_Without_Examine() { - var user = new User(0); + var user = ServiceContext.UserService.GetUserById(0); var mType = global::umbraco.cms.businesslogic.media.MediaType.MakeNew(user, "TestMediaType"); var mRoot = global::umbraco.cms.businesslogic.media.Media.MakeNew("MediaRoot", mType, user, -1); diff --git a/src/Umbraco.Web.UI/config/ClientDependency.config b/src/Umbraco.Web.UI/config/ClientDependency.config index 2781de0795..0023483deb 100644 --- a/src/Umbraco.Web.UI/config/ClientDependency.config +++ b/src/Umbraco.Web.UI/config/ClientDependency.config @@ -10,7 +10,7 @@ NOTES: * Compression/Combination/Minification is not enabled unless debug="false" is specified on the 'compiliation' element in the web.config * A new version will invalidate both client and server cache and create new persisted files --> - +