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
如果您划分管道的权力并添加正确的服务,您将能够添加安全区分每个客户的例外情况。
希望能帮到你
我有多个针对不同用户的索引视图,但它们共享相同的 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
如果您划分管道的权力并添加正确的服务,您将能够添加安全区分每个客户的例外情况。 希望能帮到你