【问题标题】:custom role provider for user.isuserinrole mvcuser.isuserinrole mvc 的自定义角色提供程序
【发布时间】:2013-08-25 00:25:26
【问题描述】:

我有一个具有自定义成员资格的 c# mvc razor Web 应用程序,并且一切正常。 我可以使用这个来获取登录的用户名:user.identity.name。 我有一个用户名及其角色的数据库。 现在的问题是,在我的一个观点中,我试图将访问权限限制为“管理员” 所以我尝试使用user.isinrole 但是,这总是返回错误。 所以然后我尝试使用roles.isuserinrole,然后我得到一个异常,说它没有启用。

我在 Google 周围发现了几个具有 isuserinrole 功能的角色提供者自定义控制器。

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

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

提前感谢您的回复。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 这正是我的想法!
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      你可以简单地覆盖界面,像这样

         [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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-06-15
        • 2014-10-15
        • 1970-01-01
        • 2011-05-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多