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 操作方法应执行其自己的授权检查。

上一篇:ASP.NET Core 中基于资源的授权

下一篇:使用 ASP.NET Core 中的特定方案授权

关注微信小程序
程序员编程王-随时随地学编程

扫描二维码
程序员编程王

扫一扫关注最新编程教程