Exemplo n.º 1
0
 public AuthorizationExtensionMiddleware(RequestDelegate next, IPolicyCombiner policyCombiner)
 {
     _next           = next ?? throw new ArgumentNullException(nameof(next));;
     _policyCombiner = policyCombiner ?? throw new ArgumentNullException(nameof(policyCombiner));
 }
        public async Task CombineAsyncTest()
        {
            IServiceProvider serviceProvider = CreateServices();

            using IServiceScope scope = serviceProvider.CreateScope();
            IPolicyCombiner policyCombiner = scope.ServiceProvider.GetRequiredService <IPolicyCombiner>();
            //如果使用AuthorizeAttribute
            AuthorizeData authorizeData = new AuthorizeData();
            var           policy        = await policyCombiner.CombineAsync(authorizeData);

            policy.AuthenticationSchemes.ShouldBeEmpty();
            policy.Requirements.Count().ShouldBe(1);
            policy.Requirements[0].ShouldBeOfType <DenyAnonymousAuthorizationRequirement>();


            authorizeData = new AuthorizeData()
            {
                Policies = new string[] { "test" }
            };
            policy = await policyCombiner.CombineAsync(authorizeData);

            policy.AuthenticationSchemes.ShouldBeEmpty();
            policy.Requirements.Count().ShouldBe(1);
            policy.Requirements[0].ShouldBeOfType <NameAuthorizationRequirement>();

            authorizeData = new AuthorizeData()
            {
                AllowedRoles = new string[] { "Administrator", "User" }
            };
            policy = await policyCombiner.CombineAsync(authorizeData);

            policy.AuthenticationSchemes.ShouldBeEmpty();
            policy.Requirements.Count().ShouldBe(1);
            policy.Requirements[0].ShouldBeOfType <RolesOrUsersAuthorizationRequirement>();

            authorizeData = new AuthorizeData()
            {
                AllowedRoles = new string[] { "Administrator", "User" }, Policies = new string[] { "test" }
            };
            policy = await policyCombiner.CombineAsync(authorizeData);

            policy.AuthenticationSchemes.ShouldBeEmpty();
            policy.Requirements.Count().ShouldBe(2);
            policy.Requirements.Count(r => r.GetType() == typeof(NameAuthorizationRequirement)).ShouldBe(1);
            policy.Requirements.Count(r => r.GetType() == typeof(RolesOrUsersAuthorizationRequirement)).ShouldBe(1);

            authorizeData = new AuthorizeData()
            {
                AllowedAllRoles = true
            };
            policy = await policyCombiner.CombineAsync(authorizeData);

            policy.AuthenticationSchemes.ShouldBeEmpty();
            policy.Requirements.Count().ShouldBe(1);
            policy.Requirements[0].ShouldBeOfType <DenyAnonymousAuthorizationRequirement>();

            authorizeData = new AuthorizeData()
            {
                DeniedAll = true
            };
            policy = await policyCombiner.CombineAsync(authorizeData);

            policy.AuthenticationSchemes.ShouldBeEmpty();
            policy.Requirements.Count().ShouldBe(1);
            policy.Requirements[0].ShouldBeOfType <DenyAllAuthorizationRequirement>();

            authorizeData = new AuthorizeData()
            {
                AllowedRoles = new string[] { "Administrator", "User" },
                AllowedUsers = new string[] { "1", "2" }
            };
            policy = await policyCombiner.CombineAsync(authorizeData);

            policy.AuthenticationSchemes.ShouldBeEmpty();
            policy.Requirements.Count().ShouldBe(1);
            policy.Requirements[0].ShouldBeOfType <RolesOrUsersAuthorizationRequirement>();

            policy = await policyCombiner.CombineAsync(null);

            policy.ShouldBeNull();
        }
Exemplo n.º 3
0
        private AuthorizationExtensionMiddleware CreateMiddleware(RequestDelegate requestDelegate = null, IPolicyCombiner policyCombiner = null)
        {
            requestDelegate = requestDelegate ?? ((context) => Task.CompletedTask);

            return(new AuthorizationExtensionMiddleware(requestDelegate, policyCombiner));
        }