< Summary

Information
Class: Api.Auth.Handlers.PermissionCheckAuthorizeAttribute
Assembly: Api
File(s): /home/runner/work/ProjectRead.ing/ProjectRead.ing/Api/Auth/Handlers/PermissionCheckAuthorizationHandler.cs
Line coverage
40%
Covered lines: 2
Uncovered lines: 3
Coverable lines: 5
Total lines: 40
Line coverage: 40%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
GetRequirements()100%210%

File(s)

/home/runner/work/ProjectRead.ing/ProjectRead.ing/Api/Auth/Handlers/PermissionCheckAuthorizationHandler.cs

#LineLine coverage
 1// SPDX-FileCopyrightText: 2026 Alper Çelik <[email protected]>
 2//
 3// SPDX-License-Identifier: AGPL-3.0-or-later
 4
 5using System.Security.Claims;
 6
 7using Api.Auth.Models;
 8
 9using Microsoft.AspNetCore.Authorization;
 10
 11namespace Api.Auth.Handlers;
 12
 13class PermissionCheckAuthorizationHandler : AuthorizationHandler<PermissionCheckAuthorizeAttribute>
 14{
 15    protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, PermissionCheckAuthorizeAttribut
 16    {
 17        var userPermissionBitsString = context.User.FindFirstValue(UserToken.PermissionBitsType);
 18        if (!long.TryParse(userPermissionBitsString, out long userPermissionBitsLong))
 19        {
 20            return Task.CompletedTask;
 21        }
 22        var userPermissionBits = (UserPermissionBits)userPermissionBitsLong;
 23
 24        if ((requirement.PermissionBits & userPermissionBits) == requirement.PermissionBits)
 25        {
 26            context.Succeed(requirement);
 27        }
 28        return Task.CompletedTask;
 29    }
 30}
 31
 132class PermissionCheckAuthorizeAttribute(UserPermissionBits permissionBits) : AuthorizeAttribute, IAuthorizationRequireme
 33{
 134    public UserPermissionBits PermissionBits { get; set; } = permissionBits;
 35
 36    public IEnumerable<IAuthorizationRequirement> GetRequirements()
 037    {
 038        yield return this;
 039    }
 40}