【从实作学习ASP.NET Core】Day16 | 後台 | 会员的角色

建立起了会员系统,还需要更进一步帮会员加入角色设定
毕竟後台的操作如果被一般人随便进入是会引发严重的资安问题的
今天就要加入帮会员加入角色,分隔出管理员一般使用者的身分


注册角色服务

IdentityHostingStartupservices加入.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

>>:  Gin 表单

Day 7:AWS是什麽?30天从动漫/影视作品看AWS服务应用 -《PSYCHO-PASS心灵判官》part1

提到健康监控系统,就不可不提鼎鼎大名的《PSYCHO-PASS心灵判官》中的希必拉系统Sibyl S...

Day10 事件修饰符 (1)

Vue提供了一些常用的修饰符,它可以直接套上,减少程序码,尽量的单纯处里逻辑 .stop .prev...

[Day13] 多执行绪

最近都凌晨睡前写铁人赛,就怕隔天忘记Q 嘛 这次铁人赛真的学到蛮多的,算是复习吧。 原本可能搞不懂的...

[Day20] Vue 3 单元测试 (Unit Testing) - Form Elements Handling

几乎每个网站都会使用到表单元素 (Form Elements),例如登入页、注册页就有非常多个输入框...

Day 23 「启动!Outside-In 之路」Controller 与单元测试

台湾的职业运动中,最具代表性的应该就是棒球了。大家有去打击练习场玩过吗?现在的打击练习场,在业者持续...