< Summary

Information
Class: ProjectTemplate.Web.Authentication.Extensions.AuthorizationServiceExtensions
Assembly: ProjectTemplate.Web
File(s): /home/runner/work/NetCoreApplicationTemplate/NetCoreApplicationTemplate/src/ProjectTemplate.Web/Authentication/Extensions/AuthorizationServiceExtensions.cs
Line coverage
100%
Covered lines: 46
Uncovered lines: 0
Coverable lines: 46
Total lines: 93
Line coverage: 100%
Branch coverage
50%
Covered branches: 3
Total branches: 6
Branch coverage: 50%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
AddApplicationAuthorization(...)50%66100%

File(s)

/home/runner/work/NetCoreApplicationTemplate/NetCoreApplicationTemplate/src/ProjectTemplate.Web/Authentication/Extensions/AuthorizationServiceExtensions.cs

#LineLine coverage
 1using ProjectTemplate.Web.Authentication.Claims;
 2using ProjectTemplate.Web.Authentication.Options;
 3
 4namespace ProjectTemplate.Web.Authentication.Extensions;
 5
 6/// <summary>
 7/// Provides extension methods for registering application authorization services.
 8/// </summary>
 9public static class AuthorizationServiceExtensions
 10{
 11    /// <summary>
 12    /// Adds application authorization services and baseline policies.
 13    /// </summary>
 14    /// <param name="services">The service collection to add authorization services to.</param>
 15    /// <param name="configuration">The application configuration source.</param>
 16    /// <returns>The same <see cref="IServiceCollection"/> instance for chaining.</returns>
 17    public static IServiceCollection AddApplicationAuthorization(
 18        this IServiceCollection services,
 19        IConfiguration configuration)
 20    {
 14821        ArgumentNullException.ThrowIfNull(services);
 14822        ArgumentNullException.ThrowIfNull(configuration);
 23
 14824        ApplicationAuthorizationOptions options = configuration
 14825            .GetSection(ApplicationAuthorizationOptions.SectionName)
 14826            .Get<ApplicationAuthorizationOptions>() ?? new ApplicationAuthorizationOptions();
 27
 14828        string roleClaimType = string.IsNullOrWhiteSpace(options.RoleClaimType)
 14829            ? ApplicationClaimTypes.Role
 14830            : options.RoleClaimType;
 31
 14832        string permissionClaimType = string.IsNullOrWhiteSpace(options.PermissionClaimType)
 14833            ? ApplicationClaimTypes.Permission
 14834            : options.PermissionClaimType;
 35
 14836        services
 14837            .AddOptions<ApplicationAuthorizationOptions>()
 14838            .Bind(configuration.GetSection(ApplicationAuthorizationOptions.SectionName))
 14839            .Validate(
 13040                options => !string.IsNullOrWhiteSpace(options.RoleClaimType),
 14841                "ProjectTemplate:Authorization:RoleClaimType is required.")
 14842            .Validate(
 13043                options => !string.IsNullOrWhiteSpace(options.PermissionClaimType),
 14844                "ProjectTemplate:Authorization:PermissionClaimType is required.")
 14845            .Validate(
 26046                options => options.AdministratorRoles.Any(role => !string.IsNullOrWhiteSpace(role)),
 14847                "ProjectTemplate:Authorization:AdministratorRoles must contain at least one non-empty value.")
 14848            .Validate(
 26049                options => options.ManageApplicationPermissions.Any(permission => !string.IsNullOrWhiteSpace(permission)
 14850                "ProjectTemplate:Authorization:ManageApplicationPermissions must contain at least one non-empty value.")
 14851            .ValidateOnStart();
 52
 14853        services.AddAuthorizationBuilder()
 14854            .AddPolicy(
 14855                ApplicationAuthorizationPolicyNames.AuthenticatedUser,
 12856                policy => policy.RequireAuthenticatedUser())
 14857            .AddPolicy(
 14858                ApplicationAuthorizationPolicyNames.AdministratorRole,
 14859                policy =>
 14860                {
 12861                    policy.RequireAuthenticatedUser();
 12862                    policy.RequireClaim(roleClaimType, options.AdministratorRoles);
 12863                })
 14864            .AddPolicy(
 14865                ApplicationAuthorizationPolicyNames.ManageApplicationPermission,
 14866                policy =>
 14867                {
 12868                    policy.RequireAuthenticatedUser();
 12869                    policy.RequireClaim(permissionClaimType, options.ManageApplicationPermissions);
 27670                });
 71
 14872        return services;
 73    }
 74}
 75
 76/// <summary>
 77/// Provides application authorization policy names.
 78/// </summary>
 79public static class ApplicationAuthorizationPolicyNames
 80{
 81    /// <summary>
 82    /// Policy requiring the current user to be authenticated.
 83    /// </summary>
 84    public const string AuthenticatedUser = "application.AuthenticatedUser";
 85    /// <summary>
 86    /// Policy defining the administrator role.
 87    /// </summary>
 88    public const string AdministratorRole = "application.Role.Administrator";
 89    /// <summary>
 90    /// Policy defining the manage application permission.
 91    /// </summary>
 92    public const string ManageApplicationPermission = "application.Permission.ManageApplication";
 93}