【问题标题】:Override User.IsInRole in ASP.NET Core在 ASP.NET Core 中覆盖 User.IsInRole
【发布时间】: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


【解决方案1】:

更多谷歌搜索,这是我发现的适合我的方法:

Checking login user AuthorizePolicy in Razor page on Asp.Net Core

更具体地说,我需要将 IAuthorizationService 注入到我的视图(或控制器)中,然后调用 AuthorizeAsync 方法。

(在视图中)

@inject IAuthorizationService AuthorizationService

...

@if (await AuthorizationService.AuthorizeAsync(User, "PolicyName"))
{
    <p>This paragraph is displayed because you fulfilled PolicyName.</p>
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-30
    • 2020-01-23
    • 2018-04-04
    • 2011-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多