using Microsoft.AspNetCore.Authorization;
using RSecurityBackend.Models.Generic;
using System;
using System.Linq;
using System.Threading.Tasks;
using RSecurityBackend.Services;
namespace RSecurityBackend.Authorization
{
///
/// UserGroupPermissionHandler
///
public class UserGroupPermissionHandler : AuthorizationHandler
{
///
/// HandleRequirementAsync
///
///
///
///
protected override async Task HandleRequirementAsync(AuthorizationHandlerContext context, UserGroupPermissionRequirement requirement)
{
if (!context.User.HasClaim(c => c.Type == "UserId") || !context.User.HasClaim(c => c.Type == "SessionId"))
{
context.Fail();
return;
}
RServiceResult result = await _userPermissionChecker.Check
(
new Guid(context.User.Claims.FirstOrDefault(c => c.Type == "UserId").Value),
new Guid(context.User.Claims.FirstOrDefault(c => c.Type == "SessionId").Value),
requirement.SecurableItemShortName,
requirement.OperationShortName
);
if(result.Result)
{
context.Succeed(requirement);
return;
}
context.Fail();
}
///
/// IUserPermissionChecker instance
///
private IUserPermissionChecker _userPermissionChecker;
///
/// constructor
///
///
public UserGroupPermissionHandler(IUserPermissionChecker userPermissionChecker) : base()
{
_userPermissionChecker = userPermissionChecker;
}
}
}