ASP.NET Core MVC 中有多个索引视图时如何重定向

How to redirect when having multiple indexes view in ASP.NET Core MVC

我有多个针对不同用户的索引视图,但它们共享相同的 Create/Edit/Details/Delete 视图。因此,在编辑视图中编辑角色为客户的用户时,我只想将管理员重定向到客户索引。

我不认为标签助手可以有多个值,所以我不知道从哪里开始。

您必须在 Startup.cs 添加 "RolePolicy" 中配置应用程序,方法是添加一行服务

services.AddAuthorization

在startup.cs

//more preferences..
private bool AuthorizeAccess(AuthorizationHandlerContext context)
    {
        return context.User.IsInRole("Admin") &&
                context.User.HasClaim(claim => claim.Type == "Edit Role" && claim.Value == "true") ||
                context.User.IsInRole("Super Admin");
    }
//AddAuthorization..
 services.AddAuthorization(options =>
        {options.AddPolicy("DeleteRolePolicy",
                policy => policy.RequireClaim("Delete Role", "true"));
            options.AddPolicy("CreateRolePolicy",
                policy => policy.RequireClaim("Create Role", "true"));
            options.AddPolicy("EditRolePolicy",
                policy => policy.RequireClaim("Edit Role" , "true"));  
//For more preferences you can use 
 options.AddPolicy("EditRolePolicy",
                 policy => policy.RequireAssertion(context =>AuthorizeAccess(context)));

});

在控制器中

 [HttpPost]
 [Authorize(Policy = "EditRolePolicy")]
    public async Task<IActionResult> Edit(EditViewModel model)
    {
       .....

           return View(model);
     }

此外,可以在 .cshtml 中添加异常,但从安全角度来说,最好是在控制器内部,因为可以直接使用 link 访问数据。 在 .cshtml 中

 @inject IAuthorizationService authorizationService

<h1>Roles</h1>

@if ((await authorizationService.AuthorizeAsync(User, "EditRolePolicy")).Succeeded)
   {

<a asp-controller="Ucontroller" asp-action="Edit" asp-route-id="@role.Id" class="btn btn-primary">  Edit </a>

   }

决赛在 _ViewImports.cshtml

@using Microsoft.AspNetCore.Identity;
@using Microsoft.AspNetCore.Authorization;

@addTagHelper *,Microsoft.AspNetCore.Mvc.TagHelpers

要扩展角色,可以访问这个link Policy-based authorization in ASP.NET Core

如果您划分管道的权力并添加正确的服务,您将能够添加安全区分每个客户的例外情况。 希望能帮到你