角色用户和管理员不起作用

时间:2018-01-10 16:34:04

标签: c# asp.net asp.net-mvc-4 asp.net-mvc-3

我的角色有点问题,如果我登录需要在栏菜单中显示我的名字,如果我不使用角色,这项工作正常,但是当我尝试使用我的角色时,检查不再工作。抱歉,我的英文不好

protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);


    }




    protected void Application_AuthenticateRequest()
    {
        // Check if user is logged in
        if (User == null) { return; }

        // Get username
        string username = Context.User.Identity.Name;

        // Declare array of roles
        string[] roles = null;

        using (Db db = new Db())
        {
            // Populate roles
            UsuarioDTO dto = db.Usuario.FirstOrDefault(x => x.Login == username);

            roles = db.RegraUsuario.Where(x => x.UsuarioId == dto.Id).Select(x => x.Regra.Nome).ToArray();
        }

        // Build IPrincipal object
        IIdentity userIdentity = new GenericIdentity(username);
        IPrincipal newUserObj = new GenericPrincipal(userIdentity, roles);

        // Update Context.User
        Context.User = newUserObj;
    }

在我的Loyout.html中

<ul class="nav navbar-nav">
                    @Html.Action("PaginaMenupartial", "Paginas")
                @if(Request.IsAuthenticated)
                {
                    //if user is loged show logout
                    <li><a href="/conta/logout">Sair</a></li>
                }
                else
                {
                    if (ViewBag.Tile == "Login")
                    {
                        <li class="active"><a href="/conta/login">Entrar</a></li>
                    }
                    else
                    {   //if user is not loged show login
                        <li><a href="/conta/login">Entrar</a></li>
                    }

                }
                // in this line below is my problem
                @if (Request.IsAuthenticated && User.IsInRole("User"))
                {
                    <li>@Html.Action("UsuarioNavPartial","Conta", new { area=""})</li>
                }

            </ul>

enter image description here

如果我删除并只留下@if(Request.IsAuthenticated)然后工作。 enter image description here  但我添加@if(Request.IsAuthenticated&amp;&amp; User.IsInRole(“User”))不起作用,我检查所有代码,似乎没问题,有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

确保在数据库中为此特定用户分配了确切的角色。 它必须以完全相同的方式编写。

我还想建议您,您可能希望使用ENUM或CONSTANTS作为角色名称/符号。 这样,拼写错误不会破坏特定页面(如果再次出现拼写错误)。

确保角色名称在整个项目中可访问且相同。

我假设您稍后要更改角色或添加/更新。 这也将有助于未来的发展。