據我了解,我可以在我的 Web 應用程式中將授權屬性與角色一起使用 3 個“級別”。第一個是 webapp 的全域身份驗證策略,如下所示:
serviceCollection.AddMvcCore(options =>
{
options.Filters.Add(new AuthorizeFilter("MyPolicy"));
})
.AddAuthorization(options =>
{
options.AddPolicy("MyPolicy", builder =>
{
builder.RequireAuthenticatedUser();
builder.RequireRole(new[]{"MyRole1","MyRole2"});
});
});
這意味著只有使用 MyRole1 或 MyRole2 登錄的用戶才能使用 webapp。
接下來的兩個級別將在控制器級別使用授權屬性,然后在端點級別使用授權屬性,如下所示:
[Authorize(Roles = "MyRole3,MyRole4")]
public class MyController : Controller
{
public MyController(){}
[HttpGet]
[Authorize(Roles = "MyRole5,MyRole6")]
public async Task<IActionResult> Get()
{
var result = "something";
return this.OkOrBadRequest(result);
}
}
在這種情況下,哪些角色適用于端點?是所有的角色一起 ORed 一路下來,所有的角色 ANDed 一路下來,還是“最具體的優先”的情況?
在 ORing 一路向下的情況下,這意味著從 MyRole1 到 MyRole6 的任何角色都可以在此處訪問 Get 端點。
在 ANDing 一路向下的情況下,這意味著用戶需要 (MyRole1 OR MyRole2) AND (MyRole3 OR MyRole4) AND (MyRole5 OR MyRole6) 在此處訪問 Get 端點。
在“最具體優先”的情況下,這意味著只有 MyRole5 或 MyRole6 可以訪問端點,并且忽略所有其他級別的角色。
如果我想在特定級別添加 AND,例如在 MyController 上我希望它是 (MyRole3 || MyRole4) && MyRole7,我會怎么做?
uj5u.com熱心網友回復:
授權屬性是 AND 在一起的。因此,您應該將授權鏈解讀為 MyRole1 OR MyRole2 AND MyRole3 OR MyRole4 AND MyRole5 OR MyRole6。由此,您應該能夠確定如何訪問該操作。
(MyRole1 || MyRole2) && (MyRole3 || MyRole4) && (MyRole5 || MyRole6)
這意味著要訪問該方法,您至少需要每個組中的一個角色。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/490445.html
上一篇:ASPrazorpages在生產部署后洗掉逗號(,)
下一篇:通過提供多個引數,如@customerNo、@registraionNo,從SQLServer獲取VB.NET中兩個日期之間的資料
