2012-07-10 38 views
0

我的任务是向用户提供基于角色的菜单.....这是我第一次实际上在MVC3上工作,所以期待你的帮助.... 我正在从数据库中寻找角色......如何在MVC3中提供基于角色的登录和菜单?

所以我有不同的菜单,像这[家],[关于],[项目],[设置],[资源]像这样我想要做的是当用户角色[管理员]登录我有为他提供[主页],[关于],[设置]菜单,我如何能做到这一点,任何人都可以帮助我简单地做到这一点..... 这是我到现在为止 我将如何获得从角色ID角色名称在表....我已经创建了一个登录,我不使用基于角色的角度现在我该如何提供基于角色的登录

这是我LoginModel类

 public class LoginModel 
{ 
    [Required] 
    [Display(Name = "User name")] 
    public string UserName { get; set; } 

    [Required] 
    [DataType(DataType.Password)] 
    [Display(Name = "Password")] 
    public string Password { get; set; } 

    [Display(Name = "Remember me?")] 
    public bool RememberMe { get; set; } 
    public bool IsValid(string _username, string _pwd) 
    { 

     SqlConnection cn = new SqlConnection("Data Source=LMIT-0039;Initial Catalog=BugTracker;Integrated Security=True"); 
     cn.Open(); 
     SqlCommand cmd = new SqlCommand("GetRoleName", cn); 
     cmd.CommandType = CommandType.StoredProcedure; 
     cmd.Parameters.Add("@UserName ", SqlDbType.VarChar).Value = _username; 
     cmd.Parameters.Add("@Password", SqlDbType.VarChar).Value = _pwd; 
     Object TypeUser = cmd.ExecuteScalar(); 
     cn.Close(); 
     if (TypeUser != null) 
     { 
      if (TypeUser.ToString() == "Admin") 
       return true; 
      else if (TypeUser.ToString() == "Developer") 
       return true; 
      else if (TypeUser.ToString() == "QA") 
       return true; 
      else 
       return false; 
     } 
     return true; 

    } 

任何一个可以帮助我在做这个请....

+8

你知道这个男孩叫做['Bobby Tables'](http://bobby-tables.com/)的故事吗?如果你不希望这个故事成为你的故事,请使用参数化查询。 – 2012-07-10 06:29:21

回答

0

如果您使用内置的窗体身份验证,您可以访问用户的角色是这样的:

string userRole = Roles.GetRolesForUser(User.Identity.Name).FirstOrDefault(); 

我使用了FirstOrDefault,因为用户可能有多个角色。从这里您可以使用switch语句返回相关视图。此外,如果你想隐藏的项目(在全球布局一样的菜单项),你可以这样做:

@if(Roles.GetRolesForUser(User.Identity.Name).FirstOrDefault() == "TheRoleYouWant") 
{ 
    ... 
} 

您也可以在控制器中添加一个Authorize属性的函数(或整个控制器),将只允许具有此角色的用户访问它。像这样:

[Authorize(Roles = "Admin, Role2, Role3")] 
public ActionResult Index() 
{ 
    return View(); 
} 

请注意,您可以添加多个角色,他们只需要像上面一样用逗号分隔。

还有很多其他选项,如IsUserInRole("Admin"),请看Implementing a Role Provider