ASP.NET Core 2.0身份和角色管理入门
目录
介绍
身份验证和授权
身份验证
授权
背景
先决条件
使用代码
第1步:创建数据库
第2步:创建ASP.NET Core
更新appsettings.json
步骤3:在Startup.cs文件中添加Identity Service
第4步:注册并创建您的第一个用户
迁移
刷新数据库
第5步:创建角色并为角色分配用户
第6步:创建管理页面和设置授权
创建Admin控制器
设置授权
第7步:按用户角色显示隐藏菜单
Download ASPNETCoreUserIdentity - 1.5 MB (建议按照文章自己先做)
介绍
在本文中,我们将详细介绍如何在MVC应用程序中使用ASP.NET Core Identity来创建用户角色并根据用户角色显示菜单。
在这里,我们将看到如何做:
- 创建默认管理员用户
- 创建默认管理员角色
- 将未经身份验证的用户重定向到登录页面
- 仅为授权管理员用户显示管理页面菜单
ASP.NET Identity允许我们为系统添加登录功能。在这个演示中,我们将使用SQL Server来存储用户详细信息和配置文件数据。我们将使用ASP.NET Identity进行新用户注册,登录以及维护用户配置文件数据。如果我们谈论登录,重要的部分是登录用户是否经过身份验证并且是否有权查看页面。
身份验证和授权
身份验证
检查有效用户。这里的问题是如何检查用户是否有效。当用户第一次访问网站时,他/她将注册该网站。他们所有的信息,如用户名,密码,电子邮件等都将存储在网站数据库中。当用户输入他/她的用户ID和密码时,将使用数据库检查信息。如果用户输入了与数据库中相同的用户ID和密码,则他或她是有效用户,并将被重定向到网站的主页。如果用户输入的UserID或密码与数据库不匹配,则登录页面将显示一条消息,例如“请输入有效的用户名或密码”。检查用户是否有效访问网站的整个过程称为身份验证。
授权
用户通过身份验证后,需要通过他/她的角色将其重定向到相应的页面。例如,当管理员登录时,则需要重定向到管理页面。如果会计师已登录,则需要将他/她重定向到其“帐目”页面。
背景
先决条件
确保已安装计算机中的所有先决条件。如果没有,那么一个接一个地下载并安装它们。
- 首先,从此链接下载并安装Visual Studio 2017
- SQL Server 2014或更高版本
使用代码
第1步:创建数据库
首先,我们将创建一个数据库,并使用我们的新数据库连接在appsettings.json 文件中设置连接字符串 DefaultConnection。我们将使用此数据库创建ASP.NET Core Identity表。
创建数据库:运行以下脚本以创建我们的数据库。
USE MASTER
GO-- 1) Check for the Database Exists .If the database is exist then drop and create new DB
IF EXISTS (SELECT [name] FROM sys.databases WHERE [name] = 'InventoryDB' ) DROP DATABASE InventoryDB;
GOCREATE DATABASE InventoryDB;
GOUSE InventoryDB
GO
运行数据库脚本后,我们可以看到已创建数据库并且尚未创建表。
第2步:创建ASP.NET Core
安装Visual Studio 2017后,单击“开始”,然后单击“程序”,选择“ Visual Studio 2017”——单击“ Visual Studio 2017”。单击New,然后单击Project,选择Web,然后选择 ASP.NET Core Web Application。输入您的项目名称并单击。
选择Web应用程序(模型-视图-控制器),然后单击“更改身份验证”。
选择个人用户帐户,然后单击确定以创建项目。
更新appsettings.json
在appsettings.json文件中,我们可以找到 DefaultConnection 连接字符串。在连接字符串中,更改你的SQL Server名称,UID和PWD以在一个数据库中创建和存储所有用户详细信息。
"ConnectionStrings": {"DefaultConnection": "Server= YOURSERVERNAME;Database=InventoryDB;user id= YOURSQLUSERID;password=YOURSQLPASSWORD;Trusted_Connection=True;MultipleActiveResultSets=true"},
步骤3:在Startup.cs文件中添加Identity Service
默认情况下,在ASP.NET Core应用程序中,Identity Service将添加到Startup.cs文件中的 ConfigureServices方法中。您还可以在用户注册时另外添加密码强度,还可以使用以下代码设置默认登录页/注销页以及AccessDenaiedPath。
services.AddIdentity<ApplicationUser, IdentityRole>().AddEntityFrameworkStores<ApplicationDbContext>().AddDefaultTokenProviders();//Password Strength Settingservices.Configure<IdentityOptions>(options =>{// Password settingsoptions.Password.RequireDigit = true;options.Password.RequiredLength = 8;options.Password.RequireNonAlphanumeric = false;options.Password.RequireUppercase = true;options.Password.RequireLowercase = false;options.Password.RequiredUniqueChars = 6;// Lockout settingsoptions.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(30);options.Lockout.MaxFailedAccessAttempts = 10;options.Lockout.AllowedForNewUsers = true;// User settingsoptions.User.RequireUniqueEmail = true;});//Setting the Account Login pageservices.ConfigureApplicationCookie(options =>{// Cookie settingsoptions.Cookie.HttpOnly = true;options.ExpireTimeSpan = TimeSpan.FromMinutes(30);options.LoginPath = "/Account/Login"; // If the LoginPath is not set here,// ASP.NET Core will default to /Account/Loginoptions.LogoutPath = "/Account/Logout"; // If the LogoutPath is not set here,// ASP.NET Core will default to /Account/Logoutoptions.AccessDeniedPath = "/Account/AccessDenied"; // If the AccessDeniedPath is// not set here, ASP.NET Core// will default to// /Account/AccessDeniedoptions.SlidingExpiration = true;});
下面是我们如何在ConfigureService方法中添加ASP.NET Core身份服务如下:
第4步:注册并创建您的第一个用户
现在,我们的ASP.NET Core Web应用程序已准备好供用户在我们的网站上注册,且用户也可以在注册后登录我们的系统。我们将通过在后续步骤中向用户添加角色来执行授权。构建并运行应用程序以注册您的第一个默认管理员用户。
单击注册链接注册我们的第一个用户。(PS:建议注册用户和下图一样,否则下面创建Admin角色时,其方法中的对应用户名改为您自行注册的也可。另一个问题,把Configure方法中最后一句注释掉,创建角色在下面的步骤中会介绍,但是在创建数据库表之前不需要——如果您用的此文提供的案例,否则不需要考虑。)
迁移
当我们点击“注册”按钮时,我们可以看到下面的页面。不要对这个页面感到恐慌,因为第一次运行我们需要进行迁移,只需单击Apply Migrations按钮。
我们可以看到确认为“已应用迁移”,然后单击“尝试刷新页面消息”。
刷新页面,我们可以看到新注册的用户已登录我们的网站。
刷新数据库
刷新数据库时,我们可以看到所有的Identity表都已创建。
我们可以检查aspNetUsers表以查找新创建的用户详细信息。我们还可以看到ASPNetRoles并且ASPNetUserRoles没有记录,因为我们尚未为角色创建任何角色或添加用户。在下一步中,我们将添加一个新角色为“ Admin”,我们将新注册用户添加为Admin。
第5步:创建角色并为角色分配用户
我们使用以下方法创建一个新角色为“ Admin”,我们将最近注册的“ Admin” 分配给我们的网站。打开Startup.cs文件,并在你的Startup.cs文件中添加以下方法。
private async Task CreateUserRoles(IServiceProvider serviceProvider){var RoleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();var UserManager = serviceProvider.GetRequiredService<UserManager<ApplicationUser>>();IdentityResult roleResult;//Adding Admin Rolevar roleCheck = await RoleManager.RoleExistsAsync("Admin");if (!roleCheck){//create the roles and seed them to the databaseroleResult = await RoleManager.CreateAsync(new IdentityRole("Admin"));}//Assign Admin role to the main User here we have given our newly registered//login id for Admin managementApplicationUser user = await UserManager.FindByEmailAsync("syedshanumcain@gmail.com");var User = new ApplicationUser();await UserManager.AddToRoleAsync(user, "Admin");}
从Startup.cs文件中,我们可以找到该Configure方法。从这个Configure方法调用我们的CreateUserRoles方法。当我们构建和运行应用程序时,我们可以看到在ASPNetRole表中将创建“Admin”的新角色 。
当我们构建并运行应用程序时,我们可以看到ASPNetRoles表中添加了新角色,并且我们可以看到我们的默认用户已被分配了 Admin角色。
第6步:创建管理页面和设置授权
现在我们有一个用于ASP.NET Core Web应用程序的Admin用户。下一步,让我们创建一个新页面并将此页面的授权设置为仅登录,仅管理员用户可以查看此页面。为此,我们创建了一个新命命名为Admin的Controller。
创建Admin控制器
右键单击Controller文件夹并单击Add New Controller,选择MVC Controller - Empty,然后单击Add。
输入您的Controller名称为Admin,然后单击Add。
在控制器中,右键单击Index,然后单击添加视图。单击“添加”按钮以创建视图页面。
我们可以看到我们的管理控制器和管理视图已创建。
打开Admin / Index.cshtml页面以根据需要进行设计。在这里,我添加了如下的简单文字:
接下来,我们创建一个新菜单以显示Admin Page。要创建新菜单,请从Views / Shared文件夹中打开_Layout.cshtml。添加如下图所示的菜单:
现在我们已经创建了管理页面,并为管理员添加了菜单。我们仅为Admin用户创建了此页面,其他用户或未登录的用户不应该看到此页面。如果我们运行我们的应用程序会发生什么。
我们可以看到新的菜单“Admin Page”已经创建,现在对所有人开放。这意味着任何人都可以单击该链接并查看该页面的内容。
在这里,我们可以看到,我们可以通过登录查看管理页面。
设置授权
为避免这种情况,我们在管理页面控制器中使用授权。打开我们的 Admin控制器并添加以下代码行:
[Authorize(Roles = "Admin")]
public IActionResult Index()
{return View();
}
如果我们运行我们的应用程序并单击Admin Page,它将自动重定向到Log in页面。
请注意,只有管理员角色成员才能查看管理页面,因为我们仅为管理员角色设置了授权。如果您想添加更多角色,我们可以使用逗号,如下面的代码:
[Authorize(Roles = "Admin,SuperAdmin,Manager")]
第7步:按用户角色显示隐藏菜单
现在让我们更进一步的只显示登录管理员用户的管理员菜单。为此,我们从Views / Shared文件夹下打开Layout.cshtml并编辑新添加的菜单,如下面的代码。在这个代码中,首先我们检查用户是否已经过身份验证,意味着登录,然后我们检查用户是否具有查看菜单的授权。
<li>@if (User.Identity.IsAuthenticated){@if (User.IsInRole("Admin")){<a asp-area="" asp-controller="Admin" asp-action="Index">Admin Page</a>}}</li>
以下是我们的代码:
运行应用程序,默认情况下我们可以看到“Admin Page”不会显示在我们的顶层菜单中。仅登录管理员角色用户可以查看菜单。
让我们通过我们最初创建的管理员用户登录来试试这个。
登录后,我们可以看到管理员用户现在可以查看Admin Page菜单。
让我们尝试创建普通用户,因为我们现在在注册新用户。
注册后,我们可以看到,对于这个用户,我们没有添加“Admin&rdquorole”,他无权查看Admin Page。
参考链接:https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity?tabs=visual-studio%2Caspnetcore2x
原文地址:https://www.codeproject.com/Articles/1235077/Getting-Started-With-ASP-NET-Core-Identity-And-Rol
ASP.NET Core 2.0身份和角色管理入门相关推荐
- 使用依赖注入的ASP.NET Core 2.0用户角色基础动态菜单管理
目录 介绍 背景 先决条件 使用代码 第1步 - 创建数据库 创建数据库 第2步 - 创建ASP.NET Core 更新appsettings.json 步骤3 - 在Startup.cs文件中添加I ...
- Asp.Net Core 2.0 多角色权限认证
在使用 WebForm 技术开发网站的时候,微软就提供了 Form 身份认证,这使得登录认证简单了许多,不同于 WebForm 以及后来的 Asp.Net Mvc,Asp.Net Core 中的身份认 ...
- ASP.NET Core 3.0 gRPC 身份认证和授权
一.开头聊骚 本文算是对于 ASP.NET Core 3.0 gRPC 研究性学习的最后一篇了,以后在实际使用中,可能会发一些经验之文.本文主要讲 ASP.NET Core 本身的认证授权和gRPC接 ...
- [翻译] ASP.NET Core 3.0 的新增功能
全文翻译自微软官方文档英文版 What's new in ASP.NET Core 3.0 本文重点介绍了 ASP.NET Core 3.0 中最重要的更改,并提供相关文档的连接. Blazor Bl ...
- asp.net core 2.0 web api基于JWT自定义策略授权
JWT(json web token)是一种基于json的身份验证机制,流程如下: 通过登录,来获取Token,再在之后每次请求的Header中追加Authorization为Token的凭据,服务端 ...
- ASP.NET Core 2.0 : 三. 项目结构
ASP.NET Core 2.0 : 三. 项目结构 原文:ASP.NET Core 2.0 : 三. 项目结构 本章我们一起来对比着ASP.NET Framework版本看一下ASP.NET Cor ...
- ASP.NET Core 5.0新增功能摘要
.NET5.0发布了大半个月,从.NET Core3.1的平滑迁移体验令人心旷神怡,改个targetframework就完成迁移,不要太轻松!然而,ASP.NET Core5.0也有很多有意思的改变, ...
- 避免在 ASP.NET Core 3.0 中为启动类注入服务
本篇是如何升级到ASP.NET Core 3.0系列文章的第二篇. Part 1 - 将.NET Standard 2.0 类库转换为.NET Core 3.0 类库 Part 2 - IHostin ...
- ASP.NET Core 3.0预览版体验
目前.NET Core 3.0的版本为.NET Core 3.0 Preview 3,对应ASP.NET Core 3.0 Preview 3. ASP.NET Core 3.0 之后将不再支持.NE ...
最新文章
- 科室鄙视链最底端,居然是这类人
- python拿什么做可视化界面好-用python打造可视化爬虫监控系统,酷炫的图形化界面...
- 提交显示成功但是没有看到文件_如何向RTThread提交一个BSP?
- 用instrument的僵尸工具
- python面试题之如何用Python找出你目前在哪个目录?
- 如何用计算机管理员权限,计算机管理员权限在哪里设置_电脑系统如何设置管理员权限-win7之家...
- openjudge-1664 放苹果
- css空心半圆的实现,css – 透明空心或切出圆
- 基于Halcon学习的二维码识别【六】pdf417_bottle.hdev
- 微观经济学案例分析(八)
- word打印机显示服务器脱机,教你怎样解决打印机脱机打印-word资料(精).docx
- CocosCreator之绳索摆动效果
- 与“鸡”对话的时代孤独
- Android 10去除电池图标以及设置
- google 身份验证器 谷歌服务器,整整10年!谷歌身份验证器终于带来数据转移服务 不用挨个解绑取消啦...
- Bt656的数据格式
- 最全小说资源网——连载阅读升级版(亲测好用)
- 7个最好的Java机器学习开发库
- window.postMessage - 前端跨域通信
- 实验报告幻方,数组的排序和向数组中插入某个数
热门文章
- prometheus命令_Prometheus+Grafana 基础及简单搭建
- common java socket,JAVA I/O(四)网络Socket和ServerSocket
- 设计灵感|时尚潮流品牌如何通过网页设计呈现
- 2020移动应用设计流行素材|交互动画
- 设计PSD分层素材模板|几何元素平面广告,在设计风格中占有一席之地
- UI实用干货素材|工作管理、日程日历专辑
- linux下amd超频工具,AMD锐龙超频民间工具Work Tool:可单独超CCX模块
- vmware磁盘扩容_CentOS7扩容分区(LVM)
- CALLING PROCEDURES USING CALL AND RET
- 对POSIX和SystemV消息队列优化:用户态消息队列