0

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

所以我有不同的菜单,例如 [Home]、[About]、[Projects]、[SetUP]、[Resources],我想做的是当具有 [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;

    }

任何人都可以帮我做这件事吗....

4

1 回答 1

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"),看看实现角色提供者

于 2012-07-10T07:54:57.363 回答