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

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

asp.net core mvc权限控制:权限控制介绍的更多相关文章

  1. ASP.NET Core MVC 之区域(Area)

    区域(Area)是一个 ASP.NET MVC 功能,用于将相关功能组织为一个单独的命名空间(用于路由)和文件结构(用于视图).使用区域通过向控制器和操作添加 一个路由参数(area)来创建用于路由目 ...

  2. asp.net core mvc权限控制:在视图中控制操作权限

    在asp.net core mvc中提供了权限验证框架,前面的文章中已经介绍了如何进行权限控制配置,权限配置好后,权限验证逻辑自动就会执行,但是在某些情况下,我们可能需要在代码里或者视图中通过手工方式 ...

  3. asp.net core mvc权限控制:分配权限

    前面的文章介绍了如何进行权限控制,即访问控制器或者方法的时候,要求当前用户必须具备特定的权限,但是如何在程序中进行权限的分配呢?下面就介绍下如何利用Microsoft.AspNetCore.Ident ...

  4. Asp.Net Core 项目实战之权限管理系统(4) 依赖注入、仓储、服务的多项目分层实现

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  5. Asp.Net Core 项目实战之权限管理系统(3) 通过EntityFramework Core使用PostgreSQL

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  6. Asp.Net Core 项目实战之权限管理系统(2) 功能及实体设计

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  7. Asp.Net Core 项目实战之权限管理系统(0) 无中生有

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  8. Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  9. Asp.Net Core 项目实战之权限管理系统(5) 用户登录

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

随机推荐

  1. DNS远程和DNS日志

    三.rndc远程控制服务器 1.在被管理的服务器上生成密钥 # cd /var/named/chroot/etc # rndc-confgen -a -b 128 -k mrndc-key -c mr ...

  2. IIS日志路径,修改存放位置,清除日志方法

    IIS存放日志文件的默认存储路径是c:\windows\system32\logfiles 我们依次打开“我的电脑”,C盘,Windows文件夹,system32文件夹,logfiles文件夹,发现里 ...

  3. 组织Golang代码

    本月初golang官方blog(需要自己搭梯子)上发布了一篇文章,简要介绍了近几个月Go在一 些技术会议上(比如Google I/O.Gopher SummerFest等)的主题分享并伴有slide链 ...

  4. Spring MVC 关于分页的简单实现

    据本人了解,目前较常用的分页实现办法有两种: 1.每次翻页都修改SQL,向SQL传入相关参数去数据库实时查出该页的数据并显示. 2.查出数据库某张表的全部数据,再通过在业务逻辑里面进行处理去取得某些数 ...

  5. linux在线预览pdf文件开发思路

    准备:swftools,flexpaper 基本思路: 1,将pdf文件转化成swf文件 2,使用flexpaper预览swf文件 主要代码: 1,在linux中安装swftools.官网下载swft ...

  6. JAVA控制台输入输出方法总结

    java的控制台输入输出有很多方法,此文分别对其进行介绍. 1.控制台的输入 关于控制台的输入主要介绍三种方法,第一种方法使用BufferedReader获得控制台输入的数据,此方法是传统的输入方法, ...

  7. iOS 使用 github

    1. 创建 github 账号 登陆官网 https://github.com 进行创建. 2. 创建 github 仓库 3. 添加Pods依赖库所需文件 4. github 之 下载历史版本 5. ...

  8. WebStorm界面出现中文乱码(出现口口口)

    不少刚刚使用WebStorm软件的童鞋,发现在新建一个项目时,如果输入中文,会显示成口口口.这个问题要怎么解决呢... 点一下界面上那个扳手图标(settings),快捷键Ctrl+Alt+S. 2 ...

  9. 7 款华丽的 HTML5 Loading 动画特效

    我们在进行大数据的传输或者复杂操作的等待时,最好能有一个Loading等待的小动画提示用户.本文将为大家分享一些超华丽的基于HTML5的Loading加载动画特效,希望你会喜欢. 1.HTML5 Ca ...

  10. easyui-datagrid分页查询

    不想写语言描述了,直接代码吧! js: $(document).ready(function () { var driver_datagrid; $('#job').combobox({ url: ' ...