Granular permission back end done

This commit is contained in:
2026-04-11 19:03:45 +09:30
parent 3fe90355e0
commit 611f695db6
51 changed files with 3322 additions and 803 deletions
@@ -0,0 +1,45 @@
using FJPSite.Helpers;
using Microsoft.AspNetCore.Authorization;
using System.Security.Claims;
namespace FJPSite.Handlers;
public class PermissionAuthorizationHandler : AuthorizationHandler<PermissionRequirement>
{
private readonly IPermissionService _permissionService;
private readonly IHttpContextAccessor _httpContextAccessor;
public PermissionAuthorizationHandler(
IPermissionService permissionService,
IHttpContextAccessor httpContextAccessor)
{
_permissionService = permissionService;
_httpContextAccessor = httpContextAccessor;
}
protected override async Task HandleRequirementAsync(
AuthorizationHandlerContext context,
PermissionRequirement requirement)
{
if (context.User == null)
{
context.Fail();
return;
}
// Get user ID from claims
var userId = context.User.FindFirst(ClaimTypes.NameIdentifier)?.Value;
if (string.IsNullOrEmpty(userId))
{
context.Fail();
return;
}
// Check if user has the required permission
bool hasPermission = await _permissionService
.UserHasPermissionAsync(userId, requirement.Feature, requirement.Action);
if (hasPermission)
{
context.Succeed(requirement);
}
else
{
context.Fail();
}
}