• asp.net core mvc权限控制:权限控制介绍


    转载地址:https://www.cnblogs.com/dxp909/p/6388871.html

    在进行业务软件开发的时候,都会涉及到权限控制的问题,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)的权限

    到这里,我们就完成了权限控制的逻辑,以上内容只是个人理解,欢迎大家指正。

  • 相关阅读:
    LeetCode-Number of Islands
    LeetCode-Minimum Height Trees
    百度地图采集
    三层自动生成 完整源代码(for oracle)
    在Oracle中更新数据时,抛出:ORA-01008: not all variables bound
    MD5加密 及获得密码盐
    验证:非空、手机号、邮箱
    向Oracle数据库中插入数据出错:ORA-01036 无效的变量名或数据
    反射ORM
    委托事件
  • 原文地址:https://www.cnblogs.com/shuaiheng/p/12427331.html
Copyright © 2020-2023  润新知