首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >根据分配给另一个控制器/操作的角色呈现项目

根据分配给另一个控制器/操作的角色呈现项目
EN

Stack Overflow用户
提问于 2018-06-02 05:39:37
回答 1查看 24关注 0票数 0

在WindowsCore2中,在控制器1的视图上,我有许多指向控制器2的操作的链接。这些操作用Authorize属性进行注释。例如:

代码语言:javascript
复制
[Authorize(Roles = @"Domain\Group1, Domain\Group1")]
[Authorize(Roles = @"Domain\User1")]
public IActionResult DisplaySomething()
{
    return View();
}

如果当前用户没有访问该控制器/操作的权限,我不想创建/呈现链接。那么,从控制器1的角度来看,我如何检查用户是否被授权调用控制器2的操作?

EN

回答 1

Stack Overflow用户

发布于 2018-06-02 06:15:33

以最原始的方式将以下内容放入视图中。

代码语言:javascript
复制
@if (User.IsInRole("Domain\Group1"))
{
    <div>Only visible for Domain\Group1 users</div>
}

更好的做法是用它做一个HtmlHelper

为了防止角色名分布在整个应用程序中,您可以使用policies

您可以在操作方法上指定策略名称来配置对此方法的访问权限,而不是使用您的角色。

代码语言:javascript
复制
[Authorize(Policy = "MyPolicy")]
public IActionResult DisplaySomething()
{
    return View();
}

在视图中,您决定是否通过此策略名称的检查来呈现某些内容。

代码语言:javascript
复制
@if ((await AuthorizationService.AuthorizeAsync(User, "MyPolicy")).Succeeded)
{
    <div>Only visible for users matching the rules defined in policy MyPolicy</div>
}

ConfigureServices中,您可以指定例如。应在给定策略中检查哪些角色。

代码语言:javascript
复制
public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthorization(options => {

        options.AddPolicy("MyPolicy", policy => {
        policy.RequireAuthenticatedUser();
        policy.RequireRole("Domain\Group1");
        // ...
        });
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50651307

复制
相关文章

相似问题

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