47 lines
1.3 KiB
C#
47 lines
1.3 KiB
C#
using System.Security.Claims;
|
|
using Microsoft.AspNetCore.Authorization;
|
|
using Yavsc.ViewModels.Auth;
|
|
|
|
namespace Yavsc.Extensions;
|
|
|
|
public class PermissionHandler : IAuthorizationHandler
|
|
{
|
|
public Task HandleAsync(AuthorizationHandlerContext context)
|
|
{
|
|
var pendingRequirements = context.PendingRequirements.ToList();
|
|
|
|
foreach (var requirement in pendingRequirements)
|
|
{
|
|
if (requirement is ReadPermission)
|
|
{
|
|
if (IsOwner(context.User, context.Resource)
|
|
|| IsSponsor(context.User, context.Resource))
|
|
{
|
|
context.Succeed(requirement);
|
|
}
|
|
}
|
|
else if (requirement is EditPermission || requirement is DeletePermission)
|
|
{
|
|
if (IsOwner(context.User, context.Resource))
|
|
{
|
|
context.Succeed(requirement);
|
|
}
|
|
}
|
|
}
|
|
|
|
return Task.CompletedTask;
|
|
}
|
|
|
|
private static bool IsOwner(ClaimsPrincipal user, object? resource)
|
|
{
|
|
// Code omitted for brevity
|
|
return true;
|
|
}
|
|
|
|
private static bool IsSponsor(ClaimsPrincipal user, object? resource)
|
|
{
|
|
// Code omitted for brevity
|
|
return true;
|
|
}
|
|
}
|