建立起了会员系统,还需要更进一步帮会员加入角色设定
毕竟後台的操作如果被一般人随便进入是会引发严重的资安问题的
今天就要加入帮会员加入角色,分隔出管理员
和一般使用者
的身分
在IdentityHostingStartup
的services
加入.AddRoles<IdentityRole>()
来启动角色
顺便调整一下密码的规范让之後测试比较轻松
services.AddDefaultIdentity<OnlineShopUser>(options =>
{
options.Password.RequiredLength = 4; //密码长度
options.Password.RequireLowercase = false; //包含小写英文
options.Password.RequireUppercase = false; //包含大写英文
options.Password.RequireNonAlphanumeric = false; //包含符号
options.Password.RequireDigit = false; //包含数字
})
.AddRoles<IdentityRole>() //角色
.AddEntityFrameworkStores<OnlineShopUserContext>();
首先要先在Areas/Identity/Data/
加入一个Role类别
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace OnlineShopCMS.Areas.Identity.Data
{
public class OnlineShopUserRole
{
public int Id { get; set; }
public string RoleName { get; set; }
}
}
接着新增一个新的 Controller 名为 UserController.cs
在建构子上宣告使用 roleManager
来操作角色,加入 Action RoleCreate()
并建立前端页面
private readonly RoleManager<IdentityRole> _roleManager;
public UserController(RoleManager<IdentityRole> roleManager)
{
this._roleManager = roleManager; // 宣告roleManager
}
public IActionResult RoleCreate()
{
return View();
}
[HttpPost]
public async Task<IActionResult> RoleCreate(OnlineShopUserRole role)
{
var roleExist = await _roleManager.RoleExistsAsync(role.RoleName); //判断角色是否已存在
if (!roleExist)
{
var result = await _roleManager.CreateAsync(new IdentityRole(role.RoleName));
}
return View();
}
透过页面新增两个角色:管理者Administrator
和一般使用者User
接下来在注册页面加入_userManager.AddToRoleAsync(user, "Administrator").Wait();
让新帐号注册完後直接赋予角色定位
接下来就新增一个管理者和一个一般使用者的帐号来做测试
有了角色就可以来试试看验证机制啦
在ProductsController.cs
上面加上[Authorize(Roles = "Administrator")]
让他只能以管理员身分使用
测试
用一般使用者点选的时候就会被系统挡住了
<<: [Day 14] - 『转职工作的Lessons learned』 - Docker Build Issue
提到健康监控系统,就不可不提鼎鼎大名的《PSYCHO-PASS心灵判官》中的希必拉系统Sibyl S...
Vue提供了一些常用的修饰符,它可以直接套上,减少程序码,尽量的单纯处里逻辑 .stop .prev...
最近都凌晨睡前写铁人赛,就怕隔天忘记Q 嘛 这次铁人赛真的学到蛮多的,算是复习吧。 原本可能搞不懂的...
几乎每个网站都会使用到表单元素 (Form Elements),例如登入页、注册页就有非常多个输入框...
台湾的职业运动中,最具代表性的应该就是棒球了。大家有去打击练习场玩过吗?现在的打击练习场,在业者持续...