mirror of
				https://github.com/nsnail/Ocelot.git
				synced 2025-11-04 15:50:49 +08:00 
			
		
		
		
	
				
					committed by
					
						
						Thiago Loureiro
					
				
			
			
				
	
			
			
			
						parent
						
							340d0de233
						
					
				
				
					commit
					639011bc62
				
			@@ -69,15 +69,21 @@ namespace Ocelot.UnitTests.Authorization
 | 
			
		||||
        private void GivenTheAuthServiceReturns(Response<bool> expected)
 | 
			
		||||
        {
 | 
			
		||||
            _authService
 | 
			
		||||
                .Setup(x => x.Authorise(It.IsAny<ClaimsPrincipal>(), It.IsAny<Dictionary<string, string>>()))
 | 
			
		||||
                .Setup(x => x.Authorise(
 | 
			
		||||
                           It.IsAny<ClaimsPrincipal>(),
 | 
			
		||||
                           It.IsAny<Dictionary<string, string>>(),
 | 
			
		||||
                           It.IsAny<List<PlaceholderNameAndValue>>()))
 | 
			
		||||
                .Returns(expected);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void ThenTheAuthServiceIsCalledCorrectly()
 | 
			
		||||
        {
 | 
			
		||||
            _authService
 | 
			
		||||
                .Verify(x => x.Authorise(It.IsAny<ClaimsPrincipal>(),
 | 
			
		||||
                It.IsAny<Dictionary<string, string>>()), Times.Once);
 | 
			
		||||
                .Verify(x => x.Authorise(
 | 
			
		||||
                    It.IsAny<ClaimsPrincipal>(),
 | 
			
		||||
                    It.IsAny<Dictionary<string, string>>(),
 | 
			
		||||
                    It.IsAny<List<PlaceholderNameAndValue>>())
 | 
			
		||||
                        , Times.Once);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,11 @@
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Security.Claims;
 | 
			
		||||
using Ocelot.Authorisation;
 | 
			
		||||
using Ocelot.Configuration;
 | 
			
		||||
using Ocelot.DownstreamRouteFinder.UrlMatcher;
 | 
			
		||||
using Ocelot.Responses;
 | 
			
		||||
using Ocelot.Values;
 | 
			
		||||
 | 
			
		||||
using Shouldly;
 | 
			
		||||
using TestStack.BDDfy;
 | 
			
		||||
using Xunit;
 | 
			
		||||
@@ -15,6 +19,7 @@ namespace Ocelot.UnitTests.Authorization
 | 
			
		||||
        private readonly ClaimsAuthoriser _claimsAuthoriser;
 | 
			
		||||
        private ClaimsPrincipal _claimsPrincipal;
 | 
			
		||||
        private Dictionary<string, string> _requirement;
 | 
			
		||||
        private List<PlaceholderNameAndValue> _urlPathPlaceholderNameAndValues;
 | 
			
		||||
        private Response<bool> _result;
 | 
			
		||||
 | 
			
		||||
        public ClaimsAuthoriserTests()
 | 
			
		||||
@@ -38,6 +43,46 @@ namespace Ocelot.UnitTests.Authorization
 | 
			
		||||
                .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_authorize_dynamic_user()
 | 
			
		||||
        {
 | 
			
		||||
            this.Given(x => x.GivenAClaimsPrincipal(new ClaimsPrincipal(new ClaimsIdentity(new List<Claim>
 | 
			
		||||
                {
 | 
			
		||||
                    new Claim("userid", "14"),
 | 
			
		||||
                }))))
 | 
			
		||||
               .And(x => x.GivenARouteClaimsRequirement(new Dictionary<string, string>
 | 
			
		||||
                {
 | 
			
		||||
                    {"userid", "{userId}"}
 | 
			
		||||
                }))
 | 
			
		||||
               .And(x => x.GivenAPlaceHolderNameAndValueList(new List<PlaceholderNameAndValue>
 | 
			
		||||
                {
 | 
			
		||||
                   new PlaceholderNameAndValue("{userId}", "14")
 | 
			
		||||
                }))
 | 
			
		||||
               .When(x => x.WhenICallTheAuthoriser())
 | 
			
		||||
               .Then(x => x.ThenTheUserIsAuthorised())
 | 
			
		||||
               .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_not_authorize_dynamic_user()
 | 
			
		||||
        {
 | 
			
		||||
            this.Given(x => x.GivenAClaimsPrincipal(new ClaimsPrincipal(new ClaimsIdentity(new List<Claim>
 | 
			
		||||
                {
 | 
			
		||||
                    new Claim("userid", "15"),
 | 
			
		||||
                }))))
 | 
			
		||||
               .And(x => x.GivenARouteClaimsRequirement(new Dictionary<string, string>
 | 
			
		||||
                {
 | 
			
		||||
                    {"userid", "{userId}"}
 | 
			
		||||
                }))
 | 
			
		||||
               .And(x => x.GivenAPlaceHolderNameAndValueList(new List<PlaceholderNameAndValue>
 | 
			
		||||
                {
 | 
			
		||||
                    new PlaceholderNameAndValue("{userId}", "14")
 | 
			
		||||
                }))
 | 
			
		||||
               .When(x => x.WhenICallTheAuthoriser())
 | 
			
		||||
               .Then(x => x.ThenTheUserIsntAuthorised())
 | 
			
		||||
               .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_authorise_user_multiple_claims_of_same_type()
 | 
			
		||||
        {
 | 
			
		||||
@@ -78,9 +123,14 @@ namespace Ocelot.UnitTests.Authorization
 | 
			
		||||
            _requirement = requirement;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void GivenAPlaceHolderNameAndValueList(List<PlaceholderNameAndValue> urlPathPlaceholderNameAndValues)
 | 
			
		||||
        {
 | 
			
		||||
            _urlPathPlaceholderNameAndValues = urlPathPlaceholderNameAndValues;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void WhenICallTheAuthoriser()
 | 
			
		||||
        {
 | 
			
		||||
            _result = _claimsAuthoriser.Authorise(_claimsPrincipal, _requirement);
 | 
			
		||||
            _result = _claimsAuthoriser.Authorise(_claimsPrincipal, _requirement, _urlPathPlaceholderNameAndValues);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void ThenTheUserIsAuthorised()
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user