在進行業務軟體開發的時候,都會涉及到許可權控制的問題,asp.net core mvc提供了相關特性。 在具體介紹使用方法前,我們需要先瞭解幾個概念: 1,claim:英文翻譯過來是聲明的意思,一個claim包含Type,Value兩項信息。我把claim理解成一個許可權的定義,比如Type=會員,Va ...
在進行業務軟體開發的時候,都會涉及到許可權控制的問題,asp.net core mvc提供了相關特性。
在具體介紹使用方法前,我們需要先瞭解幾個概念:
1,claim:英文翻譯過來是聲明的意思,一個claim包含Type,Value兩項信息。我把claim理解成一個許可權的定義,比如Type=會員,Value=刪除操作
2,Identity:表示用戶的身份信息,比如用戶名
3,Principal:我理解成認證票據,裡面包含identity,claim信息。
4,Policy:英文翻譯過來是政策的意思,我理解的是許可權驗證的一個規則,就是當前我需要如何驗證許可權,比如要執行當前操作,必須具有會員刪除操作的claim
5,角色:一組許可權的集合
6,用戶:一個使用系統的賬戶信息
在asp.net core mvc中配置許可權控制的方法:
1,引入Microsoft.AspNetCore.Identity.EntityFrameworkCore庫,這個庫中提供了用戶,角色,登錄等相關操作,並且可以進行功能擴展。
2,在startup.cs文件中註冊服務介面以及中間件
public void ConfigureServices(IServiceCollection services)
{
......
services.AddIdentity<TUser, TRole>();
.....
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
......
app.UseIdentity();
......
}
TUser:系統中自定義的用戶類
public class ApplicationUser: IdentityUser<int>
{
//系統中擴展的用戶參數
}
TRole:系統中自定義的角色類
public class ApplicationRole: IdentityRole<int>
{
//系統擴展的角色參數
}
3,在控制器或者控制器方法上增加AuthorizeAttribute特性,配置許可權控制
AuthorizeAttribute特性中包含了一個Policy配置,就是配置許可權驗證規則,實例如下:
[Authorize(Policy ="goods")]
public class GoodsController : Controller
{}
但是這裡的goods只是規則的名稱,那這個規則又是如何設置的呢?在startup.cs的ConfigureServices中使用AddAuthorization擴展方法進行配置,實例如下:
public void ConfigureServices(IServiceCollection services)
{
.....
services.AddAuthorization(config=>{
//
config.AddPolicy("goods", builder => {
builder.AddRequirements(new ClaimsAuthorizationRequirement("goods", new string[] { "module" }));
});
});
.....
}
AddPolicy是增加規則方法,第一個參數表示規則的名稱,第二個參數是具體的規則列表,我們這裡只增加了一個許可權驗證的
規則ClaimsAuthorizationRequirement
ClaimsAuthorizationRequirement表示一個許可權規則的信息,構造方法包含兩個參數,第一個參數表示cliam的type值,第二個
參數是claim的value集合,它表示驗證當前用戶是否具有指定type,並且具有任意一個value中指定值的claim
經過以上配置後,如果當前用戶要訪問GoodsController控制器(不限制方法,如果AuthorizeAttribute是使用在方法上,那隻驗
證對應的方法,也可以多次使用),就必須具有Claim(type=goods , value=module)的許可權
到這裡,我們就完成了許可權控制的邏輯,以上內容只是個人理解,歡迎大家指正。