在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的动作?
答案 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");
// ...
});
}