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

本文关键字:程序 角色 自定义 isuserinrole mvc user | 更新日期: 2023-09-27 18:28:59

我有一个具有自定义成员资格的c#mvc剃刀式web应用程序,一切都很好。我可以通过以下方式获取登录的用户名:user.identity.name。我有一个用户名及其角色的数据库。现在的问题是,在我的一个观点中,我试图将访问权限限制为"admin"所以我尝试使用user.isinrole,但是它总是返回false。所以我尝试使用roles.isuserinrole,然后我得到一个异常,说它没有启用。

我四处搜索,发现了几个具有isuserinrole功能的角色提供程序的自定义控制器。

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

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

提前感谢您的回复。

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

尝试创建一个自定义角色提供程序。MSDN上的这一页介绍了基本知识。

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

您可以将[Authorize(Roles = "Admin")]属性添加到Action或Controller。

您可以简单地覆盖接口,使用类似的东西

   [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