using System.Collections.Generic; using System.Linq; using System.Security.Claims; using System.Threading.Tasks; using IdentityServer4.Extensions; using Kyoo.Authentication.Models; using Microsoft.AspNetCore.Authorization; using Microsoft.Extensions.Options; namespace Kyoo.Authentication { /// /// The default IAuthorizationHandler implementation. /// public class AuthorizationValidatorHandler : AuthorizationHandler { /// /// The permissions options to retrieve default permissions. /// private readonly IOptionsMonitor _options; /// /// Create a new . /// /// The option containing default values. public AuthorizationValidatorHandler(IOptionsMonitor options) { _options = options; } /// protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, AuthRequirement requirement) { if (context.User.IsAuthenticated()) { Claim perms = context.User.Claims.FirstOrDefault(x => x.Type == "permissions"); if (perms != null && perms.Value.Split(",").Contains(requirement.Permission.ToLower())) context.Succeed(requirement); } else { ICollection defaultPerms = _options.CurrentValue.Default; if (defaultPerms.Contains(requirement.Permission.ToLower())) context.Succeed(requirement); } return Task.CompletedTask; } } }