首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >User.IsInRole总是使用基于策略的授权在视图或代码中返回false

User.IsInRole总是使用基于策略的授权在视图或代码中返回false
EN

Stack Overflow用户
提问于 2021-07-22 22:05:14
回答 1查看 193关注 0票数 1

我正在开发一个带有windows身份验证的Asp.net Core应用程序。我使用下面的代码在startup.cs中定义了一个基于策略的授权角色。

代码语言:javascript
复制
services.AddAuthorization(options => {
     options.AddPolicy("Main", policy => policy.RequireRole(Configuration["APP:ADGroup"]));
});

只要在Controller方法上使用授权属性,它就能正常工作,但是如果我试图在代码中使用User.IsInRole("Main"),那么它就会失败,无论是在代码中还是在视图中,它都会返回false。

我本质上想要编写一个简单的if语句,它根据用户的角色显示一个链接。例如。

代码语言:javascript
复制
@if (User.IsInRole("Main"))
{
    <h1 class="display-4">Welcome Main</h1>
}
else
{
    <h1 class="display-4">Welcome Others</h1>
}

它总是回报别人..。

如果我用

代码语言:javascript
复制
@if(User.IsInRole("AdGroupname"))
     do something

那就成功了。

我想问题是如何让它只使用策略名而不是整个AD组名称?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-22 23:03:59

检查这个MS文档链接。它使用IAuthorizationService描述基于策略的授权。

代码语言:javascript
复制
@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操作方法应该执行自己的授权检查。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68491989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档