< Summary

Information
Class: ArturRios.Util.WebApi.Security.Filters.RoleRequirementFilter
Assembly: ArturRios.Util.WebApi
File(s): D:\Repositories\dotnet-webapi-util\src\Security\Filters\RoleRequirementFilter.cs
Line coverage
100%
Covered lines: 18
Uncovered lines: 0
Coverable lines: 18
Total lines: 46
Line coverage: 100%
Branch coverage
100%
Covered branches: 6
Total branches: 6
Branch coverage: 100%
Method coverage
100%
Covered methods: 2
Fully covered methods: 1
Total methods: 2
Method coverage: 100%
Full method coverage: 50%

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
OnAuthorization(...)100%66100%

File(s)

D:\Repositories\dotnet-webapi-util\src\Security\Filters\RoleRequirementFilter.cs

#LineLine coverage
 1using ArturRios.Extensions;
 2using ArturRios.Output;
 3using ArturRios.Util.Http;
 4using ArturRios.Util.WebApi.Security.Attributes;
 5using ArturRios.Util.WebApi.Security.Records;
 6using Microsoft.AspNetCore.Mvc;
 7using Microsoft.AspNetCore.Mvc.Filters;
 8
 9namespace ArturRios.Util.WebApi.Security.Filters;
 10
 11/// <summary>Authorization filter that rejects requests with a 403 response unless the authenticated user's role
 12/// is one of <paramref name="authorizedRoles"/>. Applied declaratively via <see cref="Attributes.RoleRequirementAttribu
 13/// unless the action is marked with <see cref="AllowAnonymousAttribute"/>.</summary>
 14/// <param name="authorizedRoles">The role values permitted to access the resource.</param>
 415public class RoleRequirementFilter(params int[] authorizedRoles) : IAuthorizationFilter
 16{
 17    /// <summary>Checks the authenticated user's role against the authorized roles and short-circuits the pipeline with 
 18    /// <param name="context">The authorization filter context for the current request.</param>
 19    public void OnAuthorization(AuthorizationFilterContext context)
 420    {
 421        var allowAnonymous = context.ActionDescriptor.EndpointMetadata.OfType<AllowAnonymousAttribute>().Any();
 22
 423        if (allowAnonymous)
 124        {
 125            return;
 26        }
 27
 328        var user = context.HttpContext.Items["User"] as AuthenticatedUser;
 29
 330        var authorized = false;
 31
 332        if (user is not null)
 233        {
 234            authorized = user.Role.In(authorizedRoles);
 235        }
 36
 337        if (authorized)
 138        {
 139            return;
 40        }
 41
 242        var output = ProcessOutput.New.WithError("You do not have permission to access this resource");
 43
 244        context.Result = new ObjectResult(output) { StatusCode = HttpStatusCodes.Forbidden };
 445    }
 46}