在进行业务软件开发的时候,都会涉及到权限控制的问题,asp.net core mvc提供了相关特性。mvc
在具体介绍使用方法前,咱们须要先了解几个概念:app
1,claim:英文翻译过来是声明的意思,一个claim包含Type,Value两项信息。我把claim理解成一个权限的定义,好比Type=会员,Value=删除操做asp.net
2,Identity:表示用户的身份信息,好比用户名ide
3,Principal:我理解成认证票据,里面包含identity,claim信息。ui
4,Policy:英文翻译过来是政策的意思,我理解的是权限验证的一个规则,就是当前我须要如何验证权限,好比要执行当前操做,必须具备会员删除操做的claim.net
5,角色:一组权限的集合翻译
6,用户:一个使用系统的帐户信息中间件
在asp.net core mvc中配置权限控制的方法:接口
1,引入Microsoft.AspNetCore.Identity.EntityFrameworkCore库,这个库中提供了用户,角色,登陆等相关操做,而且能够进行功能扩展。ip
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)的权限
到这里,咱们就完成了权限控制的逻辑,以上内容只是我的理解,欢迎你们指正。