user.isuserinrole mvc的自定义角色提供程序

时间:2013-08-25 00:25:26

标签: c# asp.net-mvc visual-studio-2010 razor

我有一个带有自定义会员资格的c#mvc razor网络应用程序,一切都很棒。 我可以使用以下命令获取登录的用户名:user.identity.name。 我有一个用户名及其角色的数据库。 现在问题是,在我的一个观点中,我试图限制只能访问“admin” 所以我尝试使用user.isinrole但是,这总是返回false。 所以我尝试使用roles.isuserinrole,然后我得到一个说明未启用的异常。

我在Google周围找到了几个具有函数isuserinrole的角色提供程序的自定义控制器。

我的问题是,我是否需要为isuserinrole创建自定义控制器? 在我看来,当我输入roles. - > visual studio列出了具有isuserinrole的内置函数列表,所以我的问题是,创建我自己的自定义角色提供程序会覆盖内置函数吗?

假设我有自定义功能,我的Web应用程序将如何将其全部绑定并检查用户是否在角色中?

提前感谢您的回复。

3 个答案:

答案 0 :(得分:2)

尝试创建自定义角色提供程序。 This page on MSDN进入了基础。

自定义角色提供程序应继承自抽象类System.Web.Security.RoleProvider。在此类中,您可以实现抽象方法IsUserInRole(string username, string roleName),以根据应用程序需求提供正确回答IsUserInRole调用所需的逻辑。

答案 1 :(得分:0)

您可以将[Authorize(Roles = "Admin")]属性添加到您的操作或控制器。

答案 2 :(得分:0)

你可以简单地覆盖界面,使用类似的东西

   [HttpPost]
    public ActionResult Login(MVVMLogin LoginData)
    {
      //validate user against database
      var IsValid = true;

        if (IsValid == true)
        {

                var Roles = "admin";

                var authTicket = new FormsAuthenticationTicket(
                    1,
                    LoginData.Username,
                    DateTime.Now,
                    DateTime.Now.AddMinutes(20), //Expires
                    false,
                    Roles,
                    "/");

                var cookie = new HttpCookie(FormsAuthentication.FormsCookieName,FormsAuthentication.Encrypt(authTicket));
                Response.Cookies.Add(cookie);

        }

        return View();
    }

并在global.asax中添加以下内容

  protected void Application_AuthenticateRequest(Object sender, EventArgs e)
    {
        if (HttpContext.Current.User == null) return;
        if (!HttpContext.Current.User.Identity.IsAuthenticated) return;
        if (!(HttpContext.Current.User.Identity is FormsIdentity)) return;

        var id = HttpContext.Current.User.Identity as FormsIdentity;
        var ticket = id.Ticket;
        var userData = ticket.UserData;
        var roles = userData.Split(new[] { ',' });

        HttpContext.Current.User = new GenericPrincipal(id, roles);
    }

现在您可以控制哪种类型的用户可以访问控制器

[Authorize(Roles = "admin,user")]
public class CampaignsController : Controller