diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Web.Common/Security/PublicAccessCheckerTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Web.Common/Security/PublicAccessCheckerTests.cs index 52c68b551f..c2760e92f3 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Web.Common/Security/PublicAccessCheckerTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Web.Common/Security/PublicAccessCheckerTests.cs @@ -5,6 +5,7 @@ using System.Security.Claims; using System.Security.Principal; using System.Text; using System.Threading.Tasks; +using AutoFixture.NUnit3; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.DependencyInjection; using Moq; @@ -117,15 +118,28 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Web.Common.Security [AutoMoqData] [Test] - public async Task GivenMemberLoggedIn_WhenMemberHasNoRoles_ThenAccessDeniedResult( + public async Task GivenMemberLoggedIn_WhenMemberHasNoRolesAndWrongUsername_ThenAccessDeniedResult( IMemberManager memberManager, IPublicAccessService publicAccessService, - IContentService contentService) + IContentService contentService, + IContent protectedNode, + IContent loginNode, + IContent noAccessNode, + string username) { PublicAccessChecker sut = CreateSut(memberManager, publicAccessService, contentService, out HttpContext httpContext); + Mock.Get(publicAccessService).Setup(x => x.GetEntryForContent(It.IsAny())) + .Returns(new PublicAccessEntry(protectedNode, loginNode, noAccessNode, new [] + { + new PublicAccessRule(Guid.Empty, Guid.Empty) + { + RuleType = Constants.Conventions.PublicAccess.MemberUsernameRuleType, + RuleValue = "AnotherUsername" + } + })); httpContext.User = GetLoggedInUser(); - MockGetUserAsync(memberManager, new MemberIdentityUser()); + MockGetUserAsync(memberManager, new MemberIdentityUser(){IsApproved = true, UserName = username}); MockGetRolesAsync(memberManager, Enumerable.Empty()); var result = await sut.HasMemberAccessToContentAsync(123); diff --git a/src/Umbraco.Web.Common/Security/PublicAccessChecker.cs b/src/Umbraco.Web.Common/Security/PublicAccessChecker.cs index 8e6174e5f1..ad9b39a7bb 100644 --- a/src/Umbraco.Web.Common/Security/PublicAccessChecker.cs +++ b/src/Umbraco.Web.Common/Security/PublicAccessChecker.cs @@ -39,11 +39,6 @@ namespace Umbraco.Cms.Web.Common.Security var username = currentMember.UserName; IList userRoles = await memberManager.GetRolesAsync(currentMember); - if (userRoles.Count == 0) - { - return PublicAccessStatus.AccessDenied; - } - if (!currentMember.IsApproved) { return PublicAccessStatus.NotApproved;