我自己的数据库中有一个用户表,它有一个“类型”字段。有 3 种类型的用户,发布者、审核员和管理员。我想知道如何使用 [Authorize(Role="Publisher")] 之类的过滤器来过滤登录的用户????
1 回答
0
据我了解, [Authorize(Role="")] 属性在您使用角色提供程序时使用。您可以很容易地自己滚动 - 请参阅此链接以获取指南。
通常我所做的是有一个 User 表、Role 表和一个 UserInRole 表。角色表只有一个角色 ID,例如“Admin”和一个描述。UserInRole 表是一个将用户 ID 链接到角色 ID 的连接表。
这样一个用户可以属于多个角色,而不是只绑定一个。
请注意这是我这样做的方式 - 不一定是正确的方式。如果您想在用户表中使用您的“类型”字段,那么它仍然可以工作 - 您的自定义角色提供程序将与我的不同。
编辑:另外 - [Authorize] 属性仅适用于成员资格提供者,并且不需要角色提供者。我认为语法是 [Authorize(User="User1,User2")] 或类似的东西。
编辑:要将用户带到错误页面,表明他的角色不正确,您可以在 AccountController 中的 Login 方法中添加一些自定义逻辑:
[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
if (ModelState.IsValid)
{
if (Membership.ValidateUser(model.UserName, model.Password))
{
if (!User.IsInRole("MyRole"))
{
return Redirect("Error");
}
else
{
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
&& !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
{
return Redirect(returnUrl);
}
else
{
return RedirectToAction("Index", "Home");
}
}
}
else
{
ModelState.AddModelError("", "The email or password provided is incorrect.");
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
于 2011-08-12T17:47:50.657 回答