1 回答

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超9個(gè)贊
我不知道什么對(duì)您不起作用,但這就是您使用 AuthorizationService 的方式。
對(duì)于此示例,我們假設(shè)您在啟動(dòng)時(shí)定義了一個(gè)策略:
services.AddAuthorization(options =>
{
// assume that claimtype of role is role.
options.AddPolicy("MyRolePolicy", policy => policy.RequireClaim("role", "SomeRole"));
});
這意味著受“MyRolePolicy”限制的代碼;僅當(dāng)用戶具有角色“SomeRole”時(shí)才可訪問(wèn)。相當(dāng)于 User.IsInRole("SomeRole")。
在視圖中注入服務(wù)并測(cè)試用戶的策略:
@using Microsoft.AspNetCore.Authorization
@inject IAuthorizationService _authorizationService
@if ((await _authorizationService.AuthorizeAsync(User, "MyRolePolicy")).Succeeded)
{
}
當(dāng)您使用自定義授權(quán)策略提供程序時(shí),策略是通過(guò)中間件添加的,例如:
public class AuthorizationPolicyProvider : DefaultAuthorizationPolicyProvider
{
public AuthorizationPolicyProvider(IOptions<AuthorizationOptions> options) : base(options)
{
}
public async override Task<AuthorizationPolicy> GetPolicyAsync(string policyName)
{
// check static policies first
var policy = await base.GetPolicyAsync(policyName);
if (policy == null)
return new AuthorizationPolicyBuilder().AddRequirements(new PermissionRequirement(policyName)).Build();
return policy;
}
}
在此示例中,策略將添加為權(quán)限(如果不存在),其中聲明類型為 permission,值為策略名稱。當(dāng)我添加政策 MyPermission 時(shí),它將檢查聲明類型 permission 的值 MyPermission。
視圖中:
@if ((await _authorizationService.AuthorizeAsync(User, "MyPermission")).Succeeded)
{
}
我不確定您所說(shuō)的“它也不是策略”是什么意思,但授權(quán)策略提供程序返回策略。因此,您應(yīng)該能夠驗(yàn)證這些策略。無(wú)論是簡(jiǎn)單的聲明類型(例如權(quán)限或角色)還是帶有參數(shù)的更復(fù)雜的策略。但名稱必須匹配。還要確保注入必要的處理程序、服務(wù)等。
更新
您還可以使用要求進(jìn)行驗(yàn)證:
@if ((await _authorizationService.AuthorizeAsync(User, null, new MinimumAgeRequirement(15))).Succeeded)
其中MinimumAgeRequirement 是要求本身。
如記錄:
AuthorizeAsync(ClaimsPrincipal, Object, IEnumerable<IAuthorizationRequirement>)
檢查用戶是否滿足特定的一組要求 指定資源
- 1 回答
- 0 關(guān)注
- 184 瀏覽
添加回答
舉報(bào)