2017-07-07 48 views
0

我知道有很多关于这个问题的主题,但我已经尝试了几种解决方案,无法使其工作。ASP.net MVC - 获取当前记录的用户角色

所以,我想在我的视图中验证当前记录的用户角色。正如有关此内容的StackOverflow主题的重要组成部分提到,我只需要做:

@User.IsInRole("Admin") 

很不幸,这始终返回false甚至与“角色”栏,在AspNetUsers表,当前登录的用户是填充“管理员”。

我也尝试了下面的方法,但它说“UserManager在当前上下文中不存在”。

<p>@UserManager.GetRoles(userId)</p> 

我的一个嫌疑人是我在注册时没有正确地为用户设置角色。我的AspNetRoles表正确填充,但AspNetUserRoles表为空。

如何解决此问题以查找我的应用程序出现了什么问题,以便我可以使用@ User.IsInRole(...)指令?

在此先感谢您的帮助。

+0

你说“甚至在该用户的AspNetUsers表中的'角色'列是'Admin'”,但是然后说“AspNetUserRoles表是空的”。如果有一个连接/交叉引用表,那么AspNetUsers表上就不会有一个Role列。 – krillgar

+0

@krillgar感谢您的回复。我不确定我是否完全理解你的观点,但你是否说我的AspNetUsersRoles表不应该是空的? – myusername21

+1

是的。由于用户可以有很多角色,并且许多用户将处于同一个角色中,所以AspNetUsers表上不应该有角色列。因为你的AspNetUserRoles表是空的,那告诉我没有用户实际上分配了角色。 – krillgar

回答

0

您是否尝试过在视图页面的顶部添加如下:

@using Microsoft.AspNet.Identity 

或者:

@if(Roles.IsUserInRole(User.Identity.GetUserName(), "Admin")) 
0

我想你不写,或者你写的,但在错误的道路这下面的代码on global.asax:

protected void FormsAuthentication_OnAuthenticate(Object sender, FormsAuthenticationEventArgs e) 
    { 

     if (FormsAuthentication.CookiesSupported == true) 
     { 
      if (Request.Cookies[FormsAuthentication.FormsCookieName] != null) 
      { 
       try 
       { 
        //let us take out the username now     
        string Email = FormsAuthentication.Decrypt(Request.Cookies[FormsAuthentication.FormsCookieName].Value).Name; 
        string roles = string.Empty; 

        using (DatabaseContext entities = new DatabaseContext()) 
        { 
         var user = entities.TblUsers.Where(u => u.Email == Email).FirstOrDefault().IDRole; 

         //here 
         roles = entities.TblRoles.Where(x => x.IDRole == user).FirstOrDefault().RoleName; 

        } 
        //let us extract the roles from our own custom cookie 

        // and here 
        //Let us set the Pricipal with our user specific details 
        e.User = new System.Security.Principal.GenericPrincipal(
         new System.Security.Principal.GenericIdentity(Email, "Forms"), roles.Split(';')); 

       } 
       catch 
       { 

        //somehting went wrong 
       } 
      } 
     } 
    } 
相关问题