如何在MVC3中提供基于角色的登录和菜单?

时间:2012-07-10 05:38:52

标签: html asp.net-mvc-3 c#-4.0

我的任务是为用户提供基于角色的菜单.....这是我第一次在MVC3上工作,所以期待你的帮助.... 我正在从数据库中找到角色......

所以我有不同的菜单,如[主页],[关于],[项目],[设置],[资源],这样我想要做的是当用户[admin]登录时我有只为他提供[Home],[About],[SetUP]菜单,我怎能做到这一点可以帮助我做这个简单的..... 这就是我现在所做的 我将如何从表格中的角色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;

    }

任何人都可以帮我这样做....

1 个答案:

答案 0 :(得分:0)

如果您使用内置的Forms身份验证,则可以访问以下用户角色:

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