ASP.NET Core 2.1中基于角色的授权
asp.net core 2.1中基于角色的授权
授权是来描述用户能够做什么的过程。例如,只允许管理员用户可以在电脑上进行软件的安装以及卸载。而非管理员用户只能使用软件而不能进行软件的安装以及卸载。它是独立的而又与验证配合使用,需要身份验证机制。对于应用程序来说,首先需要进行身份验证,然后进行进行授权。
作者:依乐祝
原文链接:https://www.cnblogs.com/yilezhu/p/9508267.html
identity是一个会员资格系统,它允许我们将登录功能添加到我们的应用程序中,身份可能属于一个或多个角色。例如,“user1”属于“admin”角色,“user2”属于“hr”的角色。
我们可以在我们的mvc或者web api应用程序中的控制器上使用authorizefilter特性来控制用户的访问。基于角色的授权可以检查登陆的用户是否有访问页面的权限。这里开发人员可以在他们的代码中加入角色。
下面我们使用一个例子来进行说明,我们将创建三个角色,对应的我们将建立三个用户。代码如下:
public void configure(iapplicationbuilder app, ihostingenvironment env, iserviceprovider serviceprovider) { .... .... app.usemvc(routes => { routes.maproute( name: "default", template: "{controller=home}/{action=index}/{id?}"); }); createroles(serviceprovider).wait(); } private async task createroles(iserviceprovider serviceprovider) { //initializing custom roles var rolemanager = serviceprovider.getrequiredservice<rolemanager<identityrole>>(); var usermanager = serviceprovider.getrequiredservice<usermanager<identityuser>>(); string[] rolenames = { "admin", "user", "hr" }; identityresult roleresult; foreach (var rolename in rolenames) { var roleexist = await rolemanager.roleexistsasync(rolename); if (!roleexist) { //create the roles and seed them to the database: question 1 roleresult = await rolemanager.createasync(new identityrole(rolename)); } } identityuser user = await usermanager.findbyemailasync("jignesh@gmail.com"); if (user == null) { user = new identityuser() { username = "jignesh@gmail.com", email = "jignesh@gmail.com", }; await usermanager.createasync(user, "test@123"); } await usermanager.addtoroleasync(user, "admin"); identityuser user1 = await usermanager.findbyemailasync("tejas@gmail.com"); if (user1 == null) { user1 = new identityuser() { username = "tejas@gmail.com", email = "tejas@gmail.com", }; await usermanager.createasync(user1, "test@123"); } await usermanager.addtoroleasync(user1, "user"); identityuser user2 = await usermanager.findbyemailasync("rakesh@gmail.com"); if (user2 == null) { user2 = new identityuser() { username = "rakesh@gmail.com", email = "rakesh@gmail.com", }; await usermanager.createasync(user2, "test@123"); } await usermanager.addtoroleasync(user2, "hr"); }
我们可以使用authorize属性的roles属性指定有权访问所请求资源的角色。例如,以下代码允许分配了“admin”角色用户进行访问的操作方法。
[authorize(roles = "admin")] public iactionresult onlyadminaccess() { viewdata["role"] = "admin"; return view("mypage"); }
我们可以使用英文的逗号分割的角色列表来允许多个角色访问的方法。例如,在以下代码段中,操作方法只能由“admin”或“user”角色的用户访问。
[authorize(roles = "admin,user")] public iactionresult multipleaccess() { viewdata["role"] = "admin"; return view("mypage"); }
我们也可以使用如下的代码来进行多角色的访问控制
[authorize(roles = "admin")] [authorize(roles = "user")] public iactionresult multipleaccess() { viewdata["role"] = "admin"; return view("mypage"); }
基于策略的角色检查
我们还可以创建基于策略的访问控制。我们可以使用授权服务进行策略的添加以及注册。在下面的代码中,我们创建了一个只允许具有“admin”角色的用户才能进行访问的策略。
public void configureservices(iservicecollection services) { .... .... services.addauthorization(options => { options.addpolicy("onlyadminaccess", policy => policy.requirerole("admin")); }); }
我们可以使用authorize 特性的“policy ”属性进行策略的应用
[authorize(policy = "onlyadminaccess")] public iactionresult policyexample() { viewdata["role"] = "admin"; return view("mypage"); }
使用这种策略方法我们也可以在razor页面中应用基于角色的授权。例如,如果我们有一个"test1.cshtml"的razor页面,而且这个页面只允许具有"admin"角色的用户访问,我们就可以使用下面的代码进行razor页面的授权访问控制。
public void configureservices(iservicecollection services) { ... ... services.addmvc().addrazorpagesoptions(options => { options.conventions.authorizepage("/test1", "onlyadminaccess"); }).setcompatibilityversion(compatibilityversion.version_2_1); services.addauthorization(options => { options.addpolicy("onlyadminaccess", policy => policy.requirerole("admin")); }); }
总结
本文是对https://www.c-sharpcorner.com/article/role-base-authorization-in-asp-net-core-2-1/ 这篇文章的翻译,讲述了asp.net core 2.1中基于角色的授权,内容都很简单,浅显易懂!
上一篇: Vue过滤器的用法和自定义过滤器使用
下一篇: 从0到1,月入过万的淘客养成记
推荐阅读
-
基于Asp.Net Core MVC和AdminLTE的响应式管理后台之侧边栏处理
-
基于aws api gateway的asp.net core验证
-
ASP.NET Core 3.0 一个 jwt 的轻量角色/用户、单个API控制的授权认证库
-
ASP.NET Core 实战:基于 Dapper 扩展你的数据访问方法
-
asp.net core MVC之实现基于token的认证
-
ASP.NET Core 实战:基于 Jwt Token 的权限控制全揭露
-
ASP.NET Core基于微软微服务eShopOnContainer事件总线EventBus的实现
-
使用Asp.Net Core MVC 开发项目实践[第四篇:基于EF Core的扩展2]
-
ASP.NET Core 基于JWT的认证(一)
-
基于ASP.Net Core开发的一套通用后台框架