在WindowsCore2中,在控制器1的视图上,我有许多指向控制器2的操作的链接。这些操作用Authorize属性进行注释。例如:
[Authorize(Roles = @"Domain\Group1, Domain\Group1")]
[Authorize(Roles = @"Domain\User1")]
public IActionResult DisplaySomething()
{
return View();
}
如果当前用户没有访问该控制器/操作的权限,我不想创建/呈现链接。那么,从控制器1的角度来看,我如何检查用户是否被授权调用控制器2的操作?
发布于 2018-06-02 06:15:33
以最原始的方式将以下内容放入视图中。
@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");
// ...
});
}
https://stackoverflow.com/questions/50651307
复制相似问题