ASP.Net MVC 5检查用户角色的_Layout

时间:2019-03-31 23:27:05

标签: c# asp.net-mvc asp.net-mvc-5 asp.net-identity

大家好,我正在尝试检查默认设置下用户的角色。 我以为我只需要在View中使用'User.IsInRole(“ User”)',但这并不容易。 我想显示某些链接,具体取决于用户的角色。 这是我所拥有的,我尝试了几种不同的选择。 我有默认的安装数据库和一些添加的表,对于本部分来说都没有关系。 Request.IsAuthenticated可用于登录。

我尝试了user.isinrole和request.isauthenticated,但是我用我的观点为该实例工作了

@if (Request.IsAuthenticated)
                    {
                        <li class="nav-item">
                            <a class="nav-link" href="#">Assign Roles</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link" href="#">View Roles</a>
                        </li>                        
                        <li class="nav-item">
                            <a class="nav-link" href="#">Reset Password</a>
                        </li>
                    } else if (Request.IsAuthenticated && User.IsInRole("User"))
                    {
                        <li class="nav-item">
                            <a class="nav-link" href="#">user Else clause</a>
                        </li>
                    } else if (Request.IsAuthenticated && User.IsInRole("Guest"))
                    {
                        <li class="nav-item">
                            <a class="nav-link" href="#">guest Else clause</a>
                        </li>
                    } else
                    {
                        <li class="nav-item">
                            <a class="nav-link" href="#">else else!! Else clause</a>
                        </li>
                    }

当没有用户登录时,“ else”有效。

2 个答案:

答案 0 :(得分:1)

您可以像这样为Principal添加扩展方法

setState()

并使用

public static class PrincipalExtensions
{
    public static bool IsInAllRoles(this IPrincipal principal, params string[] roles)
    {
        return roles.All(r => principal.IsInRole(r));
    }

    public static bool IsInAnyRoles(this IPrincipal principal, params string[] roles)
    {
        return roles.Any(r => principal.IsInRole(r));
    }
}

更多信息,请访问Usage of User.IsInRole() in a View

答案 1 :(得分:1)

这就是我最终为解决方案所做的

@if (User.IsInRole("User"))
                    {
                        <li class="nav-item">
                            <a class="nav-link" href="#">user Else clause</a>
                        </li>
                    } 
                    @if (User.IsInRole("Guest"))
                    {
                        <li class="nav-item">
                            <a class="nav-link" href="#">guest Else clause</a>
                        </li>
                    }