完善授权管理

虽然授权功能基本已经实现了,但是还是存在一些小瑕疵,例如:

  • 教师用户访问没有权限的页面时会显示404页面
  • 教师用户登录后能看到专业管理等选项
  • 登录页面有注销字样

现在完善这些功能。

添加AccessDenied

在AccountController添加AccessDenied动作,代码如下:

public IActionResult AccessDenied()
{
    return View();
}

创建AccessDenied视图,代码如下:

@{
    ViewBag.Title = "没有访问权限";
}
<div class="notification is-danger has-text-centered title is-1">没有访问权限</div>

这样,当教师用户尝试访问没有权限的页面时,会提示没有访问权限而不是404页面。

判断角色类型

在**_ViewImports.cshtml视图导入文件中引入命名空间Microsoft.AspNetCore.Identity和StuInfoManaSys.Data**。

代码如下:

@using Microsoft.AspNetCore.Identity
@using StuInfoManaSys.Data

在_Layout.cshtml布局文件最上面注入SignInManager实例,代码如下:

@inject SignInManager<IdentityUser> SignInManager

通过User.IsInRole判断角色类是否为管理员,如果是,则显示管理模块,代码如下:

<div class="navbar-menu">
    @if (User.IsInRole(UserRole.Admin.ToString()))
    {
        <div class="navbar-start">
            <a asp-controller="Major" asp-action="Index" class="navbar-item">专业管理</a>
            <a asp-controller="Grade" asp-action="Index" class="navbar-item">年级管理</a>
            <a asp-controller="Class" asp-action="Index" class="navbar-item">班级管理</a>
            <a asp-controller="Student" asp-action="Index" class="navbar-item">学生管理</a>
        </div>
    }      
    <div class="navbar-end">
        <a asp-controller="Account" asp-action="Logout" class="navbar-item">注销</a>
    </div>
</div>        

现在,如果登录教师用户,则不显示4个管理模块。

判断用户是否登录

通过SignInManager.IsSignedIn(User)可以判断用户是否登录,从而从而隐藏登录页面的注销字样,代码如下:

@if (SignInManager.IsSignedIn(User))
{
    <div class="navbar-end">
        <a asp-controller="Account" asp-action="Logout" class="navbar-item">注销</a>
    </div>
}