ASP.NET Core mvc 视图基于授权View-based authorization in ASP.NET Core MVC
本文内容
开发人员通常需要根据当前用户标识来显示、隐藏或修改 UI。可以通过依赖关系注入访问 MVC 视图中的授权服务。若要将授权服务注入到 Razor 视图,请使用 @inject
指令:
@using Microsoft.AspNetCore.Authorization
@inject IAuthorizationService AuthorizationService
如果要在每个视图中设置授权服务,请将 @inject
指令放入Views目录的 _ViewImports.有关详细信息,请参阅视图中的依赖关系注入。
使用注入的授权服务调用 AuthorizeAsync
的方法与在基于资源的授权期间进行检查的方式完全相同:
@if ((await AuthorizationService.AuthorizeAsync(User, "PolicyName")).Succeeded)
{
<p>This paragraph is displayed because you fulfilled PolicyName.</p>
}
在某些情况下,资源将是您的视图模型。调用 AuthorizeAsync
的方法与在基于资源的授权期间进行检查的方式完全相同:
@if ((await AuthorizationService.AuthorizeAsync(User, Model, Operations.Edit)).Succeeded)
{
<p><a class="btn btn-default" role="button"
href="@Url.Action("Edit", "Document", new { id = Model.Id })">Edit</a></p>
}
在前面的代码中,该模型将作为资源进行传递,策略评估应考虑到该资源。
警告
请不要依赖于应用的 UI 元素的切换可见性,作为唯一的授权检查。隐藏 UI 元素可能无法完全阻止对其关联控制器操作的访问。例如,请考虑前面代码片段中的按钮。如果用户知道相对资源 URL 是 /Document/Edit/1的,则用户可以调用 Edit
操作方法。出于此原因,Edit
操作方法应执行其自己的授权检查。