-
Notifications
You must be signed in to change notification settings - Fork 3
/
HasPermissionRequirementHandler.cs
43 lines (37 loc) · 1.47 KB
/
HasPermissionRequirementHandler.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
using Amazon.VerifiedPermissions;
using Amazon.VerifiedPermissions.Model;
using TinyTodo.Web.Database.Models;
using Microsoft.AspNetCore.Authorization;
namespace TinyTodo.Web.Authorization;
public class HasPermissionRequirementHandler : AuthorizationHandler<HasPermissionRequirement>
{
private readonly IAmazonVerifiedPermissions _verifiedPermissionsClient;
private readonly IAppConfig _appConfig;
private readonly IVerifiedPermissionsUtil _verifiedPermissionsUtil;
public HasPermissionRequirementHandler(IAmazonVerifiedPermissions verifiedPermissionsClient,
IAppConfig appConfig,
IVerifiedPermissionsUtil verifiedPermissionsUtil)
{
_verifiedPermissionsClient = verifiedPermissionsClient;
_appConfig = appConfig;
_verifiedPermissionsUtil = verifiedPermissionsUtil;
}
protected override async Task HandleRequirementAsync(AuthorizationHandlerContext context, HasPermissionRequirement requirement)
{
if(string.IsNullOrWhiteSpace(context.User.Identity?.Name))
{
context.Fail();
return;
}
var resource = context.Resource as IEntity;
var isAuthorizedResponse = await _verifiedPermissionsUtil.IsAuthorizedAsync(context.User, requirement.Action, resource);
if (isAuthorizedResponse.Decision == Decision.ALLOW)
{
context.Succeed(requirement);
}
else
{
context.Fail();
}
}
}