یا اگر نمونهی AuthorizationHandler سفارشی آنرا نیاز داشتید، به صورت زیر است:
- ابتدا یک IAuthorizationRequirement و AuthorizationHandler سفارشی را ایجاد میکنیم که در هندلر آن دسترسی کاملی به اطلاعات کاربر وارد شدهی به سیستم وجود دارد:
public class UserCanSeeProjectRequirement : IAuthorizationRequirement { public UserCanSeeProjectRequirement() { } } public class UserCanSeeProjectHandler : AuthorizationHandler<UserCanSeeProjectRequirement> { protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, UserCanSeeProjectRequirement requirement) { //claim-based validation if (context.User.HasClaim("permission.cansee", "CanSee")) context.Succeed(requirement); //role-based validation if (context.User.IsInRole("admin") || context.User.IsInRole("user")) context.Succeed(requirement); return Task.CompletedTask; } }
namespace BlazorWasm.Client { public class Program { public static async Task Main(string[] args) { // ... services.AddScoped<IAuthorizationHandler, UserCanSeeProjectHandler>(); services.AddAuthorizationCore(options => { options.AddPolicy("UserCanSeeProjectPolicy", policy => policy.Requirements.Add(new UserCanSeeProjectRequirement())); }); // ... } } }
@attribute [Authorize(Policy = "UserCanSeeProjectPolicy")]
<AuthorizeView Policy="UserCanSeeProjectPolicy"> <NotAuthorized> <h2 class="mt-5">You are not authorized to view this page</h2> </NotAuthorized> <Authorized> <div class="container my-profile"> --- Place here all the content you want your user to view ---- </div> </Authorized> </AuthorizeView>