Skip to content

Commit 3df8f74

Browse files
committed
security working on endpoints
1 parent d2a63af commit 3df8f74

File tree

7 files changed

+49
-6
lines changed

7 files changed

+49
-6
lines changed

src/Api/Endpoints/V1/Products/Create.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public ProductsController(Database db)
2626
/// <param name="product">Enter the product</param>
2727
/// <param name="culture">Enter the culture</param>
2828
/// <returns></returns>
29-
[Authorize]
29+
[Authorize(Policy = "ShouldBeAnAdmin")]
3030
[FeatureGate(Features.PRODUCT)]
3131
[ApiVersion(ApiVersionNumbers.V1)]
3232
[HttpPost("", Name = RouteNames.PostAsync)]

src/Api/Endpoints/V1/Products/Delete.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using Microsoft.AspNetCore.Http;
1+
using Microsoft.AspNetCore.Authorization;
2+
using Microsoft.AspNetCore.Http;
23
using Microsoft.AspNetCore.Mvc;
34
using System;
45
using System.Threading.Tasks;
@@ -18,6 +19,7 @@ public partial class ProductsController
1819
/// <param name="id">Enter the product id</param>
1920
/// <param name="culture"></param>
2021
/// <returns></returns>
22+
[Authorize(Policy = "ShouldBeAnAdmin")]
2123
[ApiVersion(ApiVersionNumbers.V1)]
2224
[HttpDelete("{id}", Name = RouteNames.DeleteAsync)]
2325
[ProducesResponseType(StatusCodes.Status204NoContent)]

src/Api/Endpoints/V1/Products/Read.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using Microsoft.AspNetCore.Http;
1+
using Microsoft.AspNetCore.Authorization;
2+
using Microsoft.AspNetCore.Http;
23
using Microsoft.AspNetCore.Mvc;
34
using Microsoft.EntityFrameworkCore;
45
using System;
@@ -17,6 +18,7 @@ public partial class ProductsController
1718
/// List of products.
1819
/// </summary>
1920
/// <returns>Returns list of products</returns>
21+
[Authorize(Policy = "ShouldBeAReader")]
2022
[ApiVersion(ApiVersionNumbers.V1)]
2123
[HttpGet("", Name = RouteNames.GetAsync)]
2224
[ProducesResponseType(StatusCodes.Status200OK, Type = typeof(List<ProductDTO>))]
@@ -44,6 +46,7 @@ public async Task<IActionResult> GetAsync(string culture = "en-US")
4446
/// </summary>
4547
/// <param name="id">Enter the id of product</param>
4648
/// <returns>Returns list of products</returns>
49+
[Authorize(Policy = "ShouldBeAReader")]
4750
[ApiVersion(ApiVersionNumbers.V1)]
4851
[HttpGet("{id}", Name = RouteNames.GetByIdAsync)]
4952
[ProducesResponseType(StatusCodes.Status200OK, Type = typeof(ProductDTO))]

src/Api/Endpoints/V1/Products/Update.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using Microsoft.AspNetCore.Http;
1+
using Microsoft.AspNetCore.Authorization;
2+
using Microsoft.AspNetCore.Http;
23
using Microsoft.AspNetCore.Mvc;
34
using System;
45
using System.Threading.Tasks;
@@ -17,6 +18,7 @@ public partial class ProductsController
1718
/// <param name="product">Enter the product</param>
1819
/// <param name="culture"></param>
1920
/// <returns></returns>
21+
[Authorize(Policy = "ShouldBeAReader")]
2022
[ApiVersion(ApiVersionNumbers.V1)]
2123
[HttpPut("{id}", Name = RouteNames.PutAsync)]
2224
[ProducesResponseType(StatusCodes.Status204NoContent)]

src/Api/Product.db

0 Bytes
Binary file not shown.

src/Api/Xero.Demo.Domain/Services/UserService.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ private string GenerateJWTToken(User userInfo)
4747
new Claim("id", userInfo.Id.ToString()),
4848
new Claim(JwtRegisteredClaimNames.Sub, userInfo.Username),
4949
new Claim("Name", userInfo.Name+userInfo.Name.ToString()),
50-
new Claim("Role",userInfo.Role),
50+
new Claim(ClaimTypes.Role,userInfo.Role),
5151
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
5252
},
5353
expires: DateTime.Now.AddMinutes(10),

src/Api/Xero.Demo.Infrastructure/Setup/AddAuthorizationExtension.cs

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
using Microsoft.AspNetCore.Authentication.JwtBearer;
2+
using Microsoft.AspNetCore.Authorization;
23
using Microsoft.Extensions.Configuration;
34
using Microsoft.Extensions.DependencyInjection;
45
using Microsoft.IdentityModel.Tokens;
56
using System;
7+
using System.Security.Claims;
68
using System.Text;
9+
using Xero.Demo.Api.Domain.Security;
710
using Xero.Demo.Api.Xero.Demo.Domain.Services;
811

912
namespace Xero.Demo.Api.Domain.Infrastructure
@@ -32,7 +35,40 @@ public static IServiceCollection AddSecurity(this IServiceCollection services, I
3235
};
3336
});
3437

35-
services.AddAuthorization();
38+
services.AddAuthorization(
39+
config =>
40+
{
41+
config.AddPolicy("ShouldBeAnAdmin", options =>
42+
{
43+
options.RequireAuthenticatedUser();
44+
options.AuthenticationSchemes.Add(JwtBearerDefaults.AuthenticationScheme);
45+
options.Requirements.Add(new ShouldBeAnAdminRequirement());
46+
});
47+
48+
config.AddPolicy("ShouldBeAnEditor", options =>
49+
{
50+
options.RequireClaim(ClaimTypes.Role);
51+
options.RequireRole("Reader");
52+
options.RequireAuthenticatedUser();
53+
options.AuthenticationSchemes.Add(JwtBearerDefaults.AuthenticationScheme);
54+
options.Requirements.Add(new ShouldBeAnEditorRequirement());
55+
});
56+
57+
config.AddPolicy("ShouldBeAReader", options =>
58+
{
59+
options.RequireClaim(ClaimTypes.Role);
60+
options.RequireRole("Reader");
61+
options.RequireAuthenticatedUser();
62+
options.AuthenticationSchemes.Add(JwtBearerDefaults.AuthenticationScheme);
63+
options.Requirements.Add(new ShouldBeAReaderRequirement());
64+
});
65+
66+
config.AddPolicy("ShouldContainRole", options =>
67+
options.RequireClaim(ClaimTypes.Role));
68+
});
69+
services.AddScoped<IAuthorizationHandler, ShouldBeAnAdminRequirementHandler>();
70+
services.AddScoped<IAuthorizationHandler, ShouldBeAReaderAuthorizationHandler>();
71+
services.AddScoped<IAuthorizationHandler, ShouldBeAnEditorRequirementHandler>();
3672
return services;
3773
}
3874
}

0 commit comments

Comments
 (0)