戳戳猫的小窝
更新日志
关于
虽然登录和注销功能已实现,但是好像和之前也没什么区别,原因是我们还没有设置访问权限。 # 添加中间件 在Main方法中添加Authentication和Authorization中间件,注意中间件的顺序。代码如下: ``` app.UseDeveloperExceptionPage(); app.UseStatusCodePagesWithReExecute("/error/{0}"); app.UseStaticFiles(); app.UseAuthentication(); app.UseAuthorization(); app.MapDefaultControllerRoute(); ``` 其中UseAuthentication用于验证用户的身份。 UseAuthorization用于授权用户访问资源。 # 添加Authorize标识 在需要限制的控制器中设置Authorize表示来达到访问控制的目的。 其中,MajorController,GradeController,ClassController,StudentController只运行管理员角色用户访问,因此可以在这几个控制器上设置Authorize,以StudentController为例,代码如下: ``` [Authorize(Roles = nameof(UserRole.Admin))] public class StudentController(StudentService studentService) : Controller ``` HomeController允许管理员账户和教师账户访问,代码如下: ``` [Authorize(Roles = $"{nameof(UserRole.Admin)},{nameof(UserRole.Teacher)}")] public class HomeController(SearchService searchService) : Controller ``` # 登录测试 首先登录管理员用户,应该没什么问题。 注销后登录教师用户,发现班级列表无法正常显示。 原因是班级列表需要访问StudentController中的Action,而教师用户没有StudentController的访问权限,因此会出现问题。 解决方法是让GetClassSelectPartial可以匿名访问,代码如下: ``` [AllowAnonymous] public IActionResult GetClassSelectPartial(Guid? classId, Guid? majorId, Guid? gradeId) { return PartialView("ClassSelectPartial", studentService.GetClassSelectModel(classId, majorId, gradeId)); } ``` 加上[AllowAnonymous]后,不需要管理员什么也能访问。
设置访问权限