Атрибут [Authorize (Role = "")], насколько я понимаю, используется при использовании поставщика ролей. Вы можете сделать свой собственный довольно легко - см. эту ссылку для руководства.
Обычно я использую таблицу User, таблицу Role и таблицу UserInRole. Таблица ролей просто имеет идентификатор роли, такой как «Администратор», и описание. Таблица UserInRole является таблицей соединений, которая связывает идентификатор пользователя с идентификатором роли.
Таким образом, пользователь может принадлежать к нескольким ролям, а не быть привязанным только к одной.
Пожалуйста, обратите внимание, что это то, как я это делаю - и это не обязательно правильный путь. Если вы хотите использовать свое поле "type" в пользовательской таблице, это все равно будет работать - ваш поставщик ролей будет реализован иначе, чем мой.
РЕДАКТИРОВАТЬ: Кроме того - атрибут [Authorize] будет работать только с поставщиком членства, и не требуется иметь поставщика роли. Я думаю, что синтаксис [Authorize (User = "User1, User2")] или что-то в этом роде.
РЕДАКТИРОВАТЬ: Чтобы перевести пользователя на страницу с ошибкой, указывающую, что он не в правильной роли, вы можете добавить некоторую настраиваемую логику для вашего метода входа в свой AccountController:
[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);
}