【发布时间】:2016-07-14 14:20:18
【问题描述】:
我有一个 MVC 6 网站 (asp.net core/5),我需要从剃刀页面检查用户是否处于特定角色。每当我调用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});
}
【问题讨论】:
-
IPrincipal的东西还没有吗?你可以写一个扩展方法来实现同样的事情。该属性是否仍然存在于核心中? -
这里是 github 上的 aspnet 源代码示例:github.com/aspnet/Mvc/blob/dev/test/WebSites/FiltersWebSite/…
-
看起来你现在有我们
IAuthorizationFilter的东西了。 -
仅供参考,它现在称为 ASP.NET Core。上个月末刚刚发布了一个新版本。如果您不在 ASP.Core 1.0 RTM(需要 Visual Studio 更新 3)和 Visual Studio 工具预览 2 上,我建议您更新到最新版本。这应该有效。我在许多剃须刀页面中使用它。
-
@ClintB 在更新 3 之前它没有工作吗?
标签: c# asp.net asp.net-mvc razor asp.net-core