根据分配给另一个控制器/操作的角色渲染项目

时间:2018-06-01 21:39:37

标签: asp.net-core

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

[Authorize(Roles = @"Domain\Group1, Domain\Group1")]
[Authorize(Roles = @"Domain\User1")]
public IActionResult DisplaySomething()
{
    return View();
}

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

1 个答案:

答案 0 :(得分:0)

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

@if (User.IsInRole("Domain\Group1"))
{
    <div>Only visible for Domain\Group1 users</div>
}

最好从中做出HtmlHelper

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

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

[Authorize(Policy = "MyPolicy")]
public IActionResult DisplaySomething()
{
    return View();
}

在视图中,您可以决定是否通过此政策名称检查来呈现内容。

@if ((await AuthorizationService.AuthorizeAsync(User, "MyPolicy")).Succeeded)
{
    <div>Only visible for users matching the rules defined in policy MyPolicy</div>
}

ConfigureServices中指定例如。应该在给定的策略中检查哪些角色。

public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthorization(options => {

        options.AddPolicy("MyPolicy", policy => {
        policy.RequireAuthenticatedUser();
        policy.RequireRole("Domain\Group1");
        // ...
        });
}