如何根据用户的 ASP.NET 身份角色完全隐藏某个元素?

Kni*_*ade 3 asp.net model-view-controller asp.net-mvc asp.net-identity asp.net-core

目标:根据用户在 ASP.NET Identity 中的角色隐藏某些元素,例如页面链接。

我尝试过的:[Authorize(Roles = IdentityHelper.Administrator)]

(如果您将注释放在某些元素(例如页面)上,这确实会限制对某些元素的访问,但它不会隐藏元素本身。我希望它同时执行这两项操作。)对用户隐藏这些元素并不完全重要,因为它们已经受到限制,但这将使我的网站对用户来说看起来更好。

(IdentityHelper 只是一个帮助程序类,用于设置有关管理员角色的所有详细信息)

代码示例:

//Restricts access, which is good, but does not completely hide elements from user.
[Authorize(Roles = IdentityHelper.Administrator)] 
public  async Task <IActionResult> Edit(int id)
{
    //get pixel art with corrosponding id
    PixelArt p =  await PixelDBManager.GetSinglePixelAsync(id, _context);

    //pass pixel art to view
    return View(p);
}
Run Code Online (Sandbox Code Playgroud)

我是否应该切换到基于声明或策略的身份而不是角色,或者我可以坚持使用角色来解决这个特定问题吗?

小智 8

User.IsInRole()您可以在 Razor 模板中使用。

@if(User.IsInRole(IdentityHelper.Administrator))
{
    <h1>I'm an administrator</h1>
}
Run Code Online (Sandbox Code Playgroud)