Skip to content

Commit 8b20a4a

Browse files
Adição de Politicas customizadas para OneBus
Adição de Politicas customizadas para Endpoints serem autorizados corretamente com a regra de negócio
1 parent 9fc0331 commit 8b20a4a

File tree

3 files changed

+53
-3
lines changed

3 files changed

+53
-3
lines changed

OneBus.API/Auths/FeatureHandler.cs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
using Microsoft.AspNetCore.Authorization;
2+
using OneBus.Application.Interfaces.Services;
3+
using System.Security.Claims;
4+
5+
namespace OneBus.API.Auths
6+
{
7+
public class FeatureHandler : AuthorizationHandler<FeatureRequirement>
8+
{
9+
private readonly IUserTypeFeatureService _userTypeFeatureService;
10+
11+
public FeatureHandler(IUserTypeFeatureService userTypeFeatureService)
12+
{
13+
_userTypeFeatureService = userTypeFeatureService;
14+
}
15+
16+
protected override async Task HandleRequirementAsync(
17+
AuthorizationHandlerContext context,
18+
FeatureRequirement requirement)
19+
{
20+
var success = ulong.TryParse(context.User.FindFirst(ClaimTypes.NameIdentifier)?.Value, out ulong userId);
21+
22+
if (success && await _userTypeFeatureService.HasPermissionAsync(userId, requirement.FeatureCode))
23+
{
24+
context.Succeed(requirement);
25+
}
26+
}
27+
}
28+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
using Microsoft.AspNetCore.Authorization;
2+
3+
namespace OneBus.API.Auths
4+
{
5+
public class FeatureRequirement : IAuthorizationRequirement
6+
{
7+
public FeatureRequirement(string featureCode)
8+
{
9+
FeatureCode = featureCode;
10+
}
11+
12+
public string FeatureCode { get; }
13+
}
14+
}

OneBus.API/Program.cs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,21 @@
11
using System.Text;
22
using OneBus.Infra.Ioc;
3+
using OneBus.API.Auths;
34
using OneBus.API.Handlers;
45
using OneBus.Domain.Settings;
6+
using OneBus.Domain.Constants;
57
using Microsoft.OpenApi.Models;
68
using OneBus.Infra.Data.DbContexts;
79
using Microsoft.EntityFrameworkCore;
810
using System.Text.Json.Serialization;
911
using Microsoft.AspNetCore.Http.Json;
1012
using Microsoft.IdentityModel.Tokens;
13+
using Microsoft.AspNetCore.Authorization;
1114
using Microsoft.AspNetCore.Authentication.JwtBearer;
1215

1316
var builder = WebApplication.CreateBuilder(args);
1417

15-
// Add services to the container.
18+
// Add services to the container:
1619

1720
builder.Services
1821
.AddControllers()
@@ -47,7 +50,6 @@
4750
});
4851

4952
// Add Options Pattern
50-
5153
builder.Services
5254
.AddOptions<TokenSettings>()
5355
.BindConfiguration("TokenSettings");
@@ -143,6 +145,13 @@
143145
builder.Services.AddExceptionHandler<GlobalExceptionHandler>();
144146
builder.Services.AddProblemDetails();
145147

148+
// Authorization settings
149+
builder.Services.AddAuthorizationBuilder()
150+
.AddPolicy(PolicyConstants.UpdateUser, policy =>
151+
policy.Requirements.Add(new FeatureRequirement(FeaturesCode.UpdateUserCode)));
152+
153+
builder.Services.AddSingleton<IAuthorizationHandler, FeatureHandler>();
154+
146155
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
147156
builder.Services.AddEndpointsApiExplorer();
148157

@@ -162,7 +171,6 @@
162171
});
163172

164173
// Add Rate Limiter configurations
165-
166174
builder.Services.AddRateLimiter();
167175

168176
builder.Services.AddCors(options => options.AddPolicy("*", builder =>

0 commit comments

Comments
 (0)