c# - 在 ASP.NET Core 中覆盖 User.IsInRole

标签 c# asp.net asp.net-mvc razor asp.net-core

我有一个 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/

相关文章:

c# - 将新项目添加到列表中替换列表中的旧项目

c# - 如何对列为整数的 GridView 进行排序

c# - 对象不能从 DBNull 转换为其他类型

asp.net - 使用abcPDF将HTML转换为PDF时多余的空白页

asp.net - 在 ASP.NET MVC/IIS7 中重写 URL 最简单的方法是什么?

ajax - MVC 将部分 View 返回为 JSON

c# - ASP.NET MVC 中 <% %> 和 <%= %> 有什么区别

asp.net-mvc - 当前上下文中不存在“HttpClientFactory”

c# - 在静态类中存储用户信息

c# - XmlReader - 自关闭元素不会触发 EndElement 事件?