我有一个 MVC 6 网站 (asp.net core/5),我需要从 razor 页面检查用户是否处于特定角色。每当我调用 User.IsInRole("{rolename}")
时,它每次都会返回 false。如果我只是调用我的 RoleRepository 它就可以正常工作。
我是否需要在某处重写 User.IsInRole()
功能,或者该方法在 ASP.NET Core 中是否已过时?
到目前为止,这是我的实现:
if (User.IsInRole("Admin") || User.IsInRole("SuperUser") || User.IsInRole("DataIntegrity"))
{
model.IsDataIntegrity = true;
}
当我通过授权策略调用它时,它可以正常工作,如下所示:
[Authorize("DataIntegrity")]
[ValidateAntiForgeryToken]
[HttpPost]
[Route("team/edit/{schoolId:int:min(1)}/{schoolName?}")]
public async Task<IActionResult> Edit(SchoolEditViewModel model)
{
model.SchoolInfo = await _schoolRepo.GetSchoolInfo(model.SchoolId, _currentSeason);
IsModelValid(model);
if (!ModelState.IsValid)
{
return View(await ApplyUnboundProperties(model));
}
await SaveSchool(model);
return RedirectToAction("Live", "SchoolMain", new {schoolId = model.SchoolId, schoolName = model.SchoolInfo.SchoolName});
}
最佳答案
更多谷歌搜索,这是我发现对我有用的:
Checking login user AuthorizePolicy in Razor page on Asp.Net Core
更具体地说,我需要将 IAuthorizationService 注入(inject)到我的 View (或 Controller )中,然后调用 AuthorizeAsync 方法。
(在 View 中)
@inject IAuthorizationService AuthorizationService
...
@if (await AuthorizationService.AuthorizeAsync(User, "PolicyName"))
{
<p>This paragraph is displayed because you fulfilled PolicyName.</p>
}
关于c# - 在 ASP.NET Core 中覆盖 User.IsInRole,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38376731/