< Summary

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

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
HandleRequirementAsync(...)0%2040%

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
 016    {
 017        var userPermissionBitsString = context.User.FindFirstValue(UserToken.PermissionBitsType);
 018        if (!long.TryParse(userPermissionBitsString, out long userPermissionBitsLong))
 019        {
 020            return Task.CompletedTask;
 21        }
 022        var userPermissionBits = (UserPermissionBits)userPermissionBitsLong;
 23
 024        if ((requirement.PermissionBits & userPermissionBits) == requirement.PermissionBits)
 025        {
 026            context.Succeed(requirement);
 027        }
 028        return Task.CompletedTask;
 029    }
 30}
 31
 32class PermissionCheckAuthorizeAttribute(UserPermissionBits permissionBits) : AuthorizeAttribute, IAuthorizationRequireme
 33{
 34    public UserPermissionBits PermissionBits { get; set; } = permissionBits;
 35
 36    public IEnumerable<IAuthorizationRequirement> GetRequirements()
 37    {
 38        yield return this;
 39    }
 40}