Asp.net mvc 在Asp.Net Core上的Razor页面中检查登录用户授权策略
我在找一个变种Asp.net mvc 在Asp.Net Core上的Razor页面中检查登录用户授权策略,asp.net-mvc,razor,asp.net-core-mvc,asp.net-identity-3,Asp.net Mvc,Razor,Asp.net Core Mvc,Asp.net Identity 3,我在找一个变种 @if (SignInManager.IsSignedIn(User) && User.IsInRole(Roles.Administrator)) { <div id="editArticle"> 这似乎类似于所问的问题 我发现这个链接可能会有所帮助: 该页中的示例: @if (await AuthorizationService.AuthorizeAsync(User, "PolicyName")) { <p>This
@if (SignInManager.IsSignedIn(User) && User.IsInRole(Roles.Administrator))
{
<div id="editArticle">
这似乎类似于所问的问题 我发现这个链接可能会有所帮助: 该页中的示例:
@if (await AuthorizationService.AuthorizeAsync(User, "PolicyName"))
{
<p>This paragraph is displayed because you fulfilled PolicyName.</p>
}
@if(等待AuthorizationService.authorizationAsync(用户,“PolicyName”))
{
显示此段落是因为您完成了策略名称
}
在某些情况下,资源将是您的视图模型,您可以调用
AuthorizeAsync的方式与您在
基于资源的授权
@if(等待AuthorizationService.authorizationasync(用户、模型、操作、编辑))
{
}
因此,完整视图包含:
@using Microsoft.AspNetCore.Authorization
@inject IAuthorizationService AuthorizationService
// Your HTML elements and i.e.:
@if (await AuthorizationService.AuthorizeAsync(User, "RequireAuthenticatedUser"))
{
<li><a asp-area="" asp-controller="Roles" asp-action="Index">Roles</a></li>
}
@使用Microsoft.AspNetCore.Authorization
@注入IAuthorizationService授权服务
//您的HTML元素,即:
@if(wait AuthorizationService.authorizationAsync(用户,“RequireAuthenticatedUser”))
{
角色
}
更简洁地说:
@inject Microsoft.AspNetCore.Authorization.IAuthorizationService authorizationService
@if (await authorizationService.AuthorizeAsync(User, null, "RequireAuthenticatedUser"))
{
<li><a asp-area="" asp-controller="Roles" asp-action="Index">Roles</a></li>
}
@inject Microsoft.AspNetCore.Authorization.IAuthorizationService authorizationService
@if(wait authorizationService.authorizationAsync(用户,null,“RequireAuthenticatedUser”))
{
角色
}
似乎
authorizationAsync()
需要资源参数,但可以像我的示例中那样传递null。对于Dot net core 2.0 AuthorizationService.AuthorizationAsync不再返回布尔值,它返回AuthorizationResult。dot net core 2.0的工作版本如下:
@using Microsoft.AspNetCore.Authorization
@inject IAuthorizationService AuthorizationService
@if ((await AuthorizationService.AuthorizeAsync(User, "RequireAuthenticatedUser")).Succeeded)
{
<li><a asp-area="" asp-controller="Roles" asp-action="Index">Roles</a></li>
}
@使用Microsoft.AspNetCore.Authorization
@注入IAuthorizationService授权服务
@if((wait AuthorizationService.authorizationAsync(用户,“RequireAuthenticatedUser”)).successed)
{
角色
}
如果要在许多视图中使用此功能,则最好实现自定义RazorPage:
公共抽象类MyRazorPage:RazorPage
{
公共异步任务HasPolicyAsync(字符串policyName)
{
var authorizationService=Context.RequestServices.GetService(typeof(IAuthorizationService))作为IAuthorizationService;
bool isAdmin=(wait authorizationService.authorizationAsync(User,policyName))。成功;
返回isAdmin;
}
}
然后打开_ViewImports.cshtml并添加下一条指令:
@inherits MyRazorPage<TModel>
@继承MyRazorPage
现在,您可以从任何视图调用HasPolicyAsync()方法:
if (await HasPolicyAsync(Policies.RequireAdmin))
{
<h2>Admin is authorized</h2>
}
if(等待HasPolicyAsync(Policies.RequireAdmin))
{
管理员是授权的
}
它看起来更简洁。在大多数情况下,最好使用TagHelper来处理它。 您可以像这样使用它:
<li policy="@MyGroups.Administrators">
....
....
所以不再有魔力了:-)
请参阅:这太棒了D对于下一个查找此文件的用户,您需要使用Microsoft.AspNetCore.Authorization和
@InjectIAuthorizationService AuthorizationService
aswell@Thomas谢谢你把。。。在回答这个问题时,MS忘记了他们文档中的重要信息。@JReam hehe yea我只是希望人们能投票表决这个问题而不是评论:把所有这些anwser都钉在@Talnaci Sergiu Vlad的anwser作品上。
@inherits MyRazorPage<TModel>
if (await HasPolicyAsync(Policies.RequireAdmin))
{
<h2>Admin is authorized</h2>
}
<li policy="@MyGroups.Administrators">
....