我正在开发一个带有windows身份验证的Asp.net Core应用程序。我使用下面的代码在startup.cs中定义了一个基于策略的授权角色。
services.AddAuthorization(options => {
options.AddPolicy("Main", policy => policy.RequireRole(Configuration["APP:ADGroup"]));
});只要在Controller方法上使用授权属性,它就能正常工作,但是如果我试图在代码中使用User.IsInRole("Main"),那么它就会失败,无论是在代码中还是在视图中,它都会返回false。
我本质上想要编写一个简单的if语句,它根据用户的角色显示一个链接。例如。
@if (User.IsInRole("Main"))
{
<h1 class="display-4">Welcome Main</h1>
}
else
{
<h1 class="display-4">Welcome Others</h1>
}它总是回报别人..。
如果我用
@if(User.IsInRole("AdGroupname"))
do something那就成功了。
我想问题是如何让它只使用策略名而不是整个AD组名称?
发布于 2021-07-22 23:03:59
检查这个MS文档链接。它使用IAuthorizationService描述基于策略的授权。
@using Microsoft.AspNetCore.Authorization
@inject IAuthorizationService AuthorizationService
@if ((await AuthorizationService.AuthorizeAsync(User, "PolicyName")).Succeeded)
{
<p>This paragraph is displayed because you fulfilled PolicyName.</p>
}请注意docs页面底部关于使用此方法的警告。
警告 不要将应用程序UI元素的可见性作为唯一的授权检查。隐藏UI元素可能不会完全阻止对其关联控制器操作的访问。例如,考虑前面代码段中的按钮。如果用户知道相对资源URL为/Document/ Edit /1,则可以调用Edit操作方法。因此,Edit操作方法应该执行自己的授权检查。
https://stackoverflow.com/questions/68491989
复制相似问题