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应用程序将如何将其全部绑定并检查用户是否处于角色中?
提前感谢您的回复。
尝试创建一个自定义角色提供程序。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