自定義授權策略通過定義要求、處理程序并注冊策略實現(xiàn),如MinimumAgeRequirement與Handler結合Policy控制訪問。
在 ASP.NET Core 中,自定義授權策略是通過組合策略名稱、要求(Requirements)、處理程序(Handlers)和策略注冊來實現(xiàn)的。你可以根據(jù)業(yè)務邏輯靈活控制訪問權限,比如基于用戶角色、聲明、資源狀態(tài)等條件進行判斷。
授權要求是一個繼承自 IAuthorizationRequirement 的類,用于表示某種權限條件。
public class MinimumAgeRequirement : IAuthorizationRequirement{
????public int Age { get; }
????public MinimumAgeRequirement(int age)
????{
????????Age = age;
????}
}
處理程序負責驗證用戶是否滿足指定的要求。它需要實現(xiàn) AuthorizationHandler<T>,其中 T 是你的要求類型。
public class MinimumAgeHandler : AuthorizationHandler<MinimumAgeRequirement>{
????protected override Task HandleRequirementAsync(AuthorizationHandlerContext context,
????????MinimumAgeRequirement requirement)
????{
????????// 檢查用戶是否有出生日期聲明
????????if (context.User.HasClaim(c => c.Type == ClaimTypes.DateOfBirth))
????????{
????????????var birthDate = DateTime.Parse(context.User.FindFirst(ClaimTypes.DateOfBirth).Value);
????????????int age = DateTime.Today.Year - birthDate.Year;
????????????if (birthDate > DateTime.Today.AddYears(-age)) age--;
<br> if (age >= requirement.Age) <br> { <br> context.Succeed(requirement); // 滿足條件 <br> } <br> } <br> return Task.CompletedTask; <br> } <br>}
在 Program.cs 或啟動配置中注冊授權服務,并添加自定義策略。
builder.Services.AddAuthorization(options =>{
????options.AddPolicy("AtLeast18", policy =>
????????policy.Requirements.Add(new MinimumAgeRequirement(18)));
});
builder.Services.AddScoped<IAuthorizationHandler, MinimumAgeHandler>();
通過 [Authorize(Policy = "AtLeast18")] 應用策略。
[Authorize(Policy = "AtLeast18")]public IActionResult AdultContent()
{
????return View();
}
基本上就這些。你還可以創(chuàng)建更復雜的策略,比如結合多個要求、基于資源的授權(Resource-based Authorization),或動態(tài)生成策略。關鍵是理解“要求 + 處理程序 + 策略名”這一模型。只要注冊正確,ASP.NET Core 會自動調(diào)用對應的處理邏輯。不復雜但容易忽略細節(jié),比如服務注冊順序或聲明格式。
以上就是ASP.NET Core 中的授權策略如何自定義?的詳細內(nèi)容,更多請關注php中文網(wǎng)其它相關文章!
每個人都需要一臺速度更快、更穩(wěn)定的 PC。隨著時間的推移,垃圾文件、舊注冊表數(shù)據(jù)和不必要的后臺進程會占用資源并降低性能。幸運的是,許多工具可以讓 Windows 保持平穩(wěn)運行。
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號