Enigmatry.Entry.AspNetCore.Authorization
9.3.0
See the version list below for details.
dotnet add package Enigmatry.Entry.AspNetCore.Authorization --version 9.3.0
NuGet\Install-Package Enigmatry.Entry.AspNetCore.Authorization -Version 9.3.0
<PackageReference Include="Enigmatry.Entry.AspNetCore.Authorization" Version="9.3.0" />
<PackageVersion Include="Enigmatry.Entry.AspNetCore.Authorization" Version="9.3.0" />
<PackageReference Include="Enigmatry.Entry.AspNetCore.Authorization" />
paket add Enigmatry.Entry.AspNetCore.Authorization --version 9.3.0
#r "nuget: Enigmatry.Entry.AspNetCore.Authorization, 9.3.0"
#:package Enigmatry.Entry.AspNetCore.Authorization@9.3.0
#addin nuget:?package=Enigmatry.Entry.AspNetCore.Authorization&version=9.3.0
#tool nuget:?package=Enigmatry.Entry.AspNetCore.Authorization&version=9.3.0
Authorization Building Block
Building Block with startup extensions for enabling permission-based authorization
Registration
You can use the AppAddAuthorization extension method on IServiceCollection.
This will register RequirementHandlers for permission-based authorization for the specified permission type (TPermission):
public void ConfigureServices(IServiceCollection services)
{
...
services.AppAddAuthorization<TPermission>();
}
Permission type
Underneath the covers, policy based authentication is used through a custom IAuthorizationPolicyProvider implementation and permissions are encoded to a policy name.
As a result, the permission type must be capable of converting to and from a string.
Types such as 'String', 'Enum', and 'int' are automatically supported. If you want to use a custom permission type, you must implement [System.ComponentModel.TypeConverter].(https://learn.microsoft.com/en-us/dotnet/api/system.componentmodel.typeconverter).
For the rest of the examples in this document, let's use an enum as the permission type:
public enum PermissionId
{
Read,
Write
}
Securing API methods
To secure a method on a controller, you can now use UserHasPermission with list of requred permissions:
[HttpGet("UserWithPermissionIsAllowed")]
[UserHasPermission<PermissionId>(PermissionId.Read, PermissionId.Write)]
public IEnumerable<WeatherForecast> UserWithPermissionIsAllowed() => Array.Empty<WeatherForecast>();
Implementing authorization checks
Because the actual check if the current user has the right permissions can be application-specific, this building block only provides an interface IAuthorizationProvider, with no default implementation:
public interface IAuthorizationProvider<in TPermission> where TPermission : notnull
{
public bool AuthorizePermissions(IEnumerable<TPermission> permissions);
}
Applications using this building block need to register their own implementation:
services.AddScoped<IAuthorizationProvider<PermissionId>, SampleAuthorizationProvider>();
public class SampleAuthorizationProvider : IAuthorizationProvider<PermissionId>
{
public bool AuthorizePermissions(IEnumerable<PermissionId> permissions) =>
// Let's assume the current user only has the 'Read' permission
permissions.Any(p => p == PermissionId.Read);
}
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net9.0
- Enigmatry.Entry.AspNetCore (>= 9.3.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 9.3.1-preview.1 | 128 | 11/25/2025 |
| 9.3.0 | 337 | 11/10/2025 |
| 9.2.0 | 546 | 9/24/2025 |
| 9.1.1-preview.5 | 187 | 8/8/2025 |
| 9.1.1-preview.4 | 110 | 6/27/2025 |
| 9.1.1-preview.3 | 139 | 6/4/2025 |
| 9.1.0 | 270 | 6/3/2025 |
| 9.0.1-preview.8 | 147 | 5/26/2025 |
| 9.0.1-preview.7 | 215 | 5/13/2025 |
| 9.0.1-preview.6 | 374 | 5/9/2025 |
| 9.0.1-preview.5 | 159 | 5/7/2025 |
| 9.0.1-preview.4 | 140 | 4/30/2025 |
| 9.0.1-preview.2 | 144 | 4/1/2025 |
| 9.0.0 | 953 | 2/26/2025 |
| 8.2.0 | 300 | 9/24/2025 |
| 8.1.1-preview.3 | 143 | 5/7/2025 |
| 8.1.1-preview.1 | 145 | 4/1/2025 |
| 8.1.0 | 699 | 2/19/2025 |
| 8.0.1-preview.4 | 91 | 2/7/2025 |
| 8.0.1-preview.2 | 69 | 1/15/2025 |
| 8.0.0 | 1,072 | 11/27/2024 |
| 3.4.6-preview.10 | 82 | 11/27/2024 |
| 3.4.3 | 493 | 10/22/2024 |
| 3.4.2 | 543 | 10/11/2024 |
| 3.4.1 | 188 | 10/9/2024 |
| 3.4.0 | 170 | 10/9/2024 |
| 3.3.2 | 303 | 8/28/2024 |
| 3.3.2-preview.7 | 96 | 8/27/2024 |
| 3.3.1 | 362 | 7/16/2024 |
| 3.3.1-preview.4 | 85 | 7/12/2024 |
| 3.3.0 | 1,172 | 6/20/2024 |
| 3.2.1-preview.4 | 88 | 6/17/2024 |
| 3.2.1-preview.1 | 85 | 5/23/2024 |
| 3.2.0 | 882 | 4/3/2024 |
| 3.1.1-preview.1 | 94 | 3/13/2024 |
| 3.1.0 | 393 | 3/8/2024 |
| 3.1.0-preview.2 | 156 | 2/19/2024 |
| 3.0.1-preview.2 | 1,148 | 2/9/2024 |
| 3.0.1-preview.1 | 103 | 1/24/2024 |
| 3.0.0 | 416 | 1/15/2024 |
| 3.0.0-preview.14 | 127 | 1/9/2024 |
| 3.0.0-preview.12 | 93 | 1/9/2024 |
| 3.0.0-preview.5 | 91 | 1/10/2024 |
| 3.0.0-preview.2 | 149 | 12/28/2023 |
| 3.0.0-preview | 204 | 12/20/2023 |
| 2.1.0 | 239 | 12/28/2023 |
| 2.0.1-preview.3 | 134 | 12/1/2023 |
| 2.0.1-preview.2 | 110 | 11/29/2023 |
| 2.0.1-preview.1 | 103 | 11/28/2023 |
| 2.0.0 | 310 | 11/8/2023 |
| 2.0.0-preview.3 | 482 | 10/27/2023 |
| 2.0.0-preview.2 | 102 | 10/27/2023 |
| 2.0.0-preview.1 | 99 | 10/27/2023 |
| 2.0.0-preview | 180 | 10/27/2023 |
| 1.1.500 | 183 | 10/27/2023 |
| 1.1.495 | 919 | 9/24/2023 |
| 1.1.486 | 511 | 9/13/2023 |
| 1.1.484 | 217 | 9/7/2023 |
| 1.1.482 | 211 | 9/6/2023 |
| 1.1.480 | 242 | 8/24/2023 |
| 1.1.477 | 565 | 8/2/2023 |
| 1.1.464 | 227 | 7/5/2023 |
| 1.1.447 | 283 | 5/26/2023 |