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; } } }