2014-12-08 2 views
0

Так в моей .net приложения У меня есть три контроллераНа перед тем маршруту

  1. Главная
  2. Кухня
  3. Учреждение

Когда пользователь входит в систему, я получаю то, что контроллер пользователь может идти. Я определил некоторые роли и использую те, которые я получаю, кому нужно идти куда угодно.

Так, например, если пользователь Боб - повар. Когда Боб входит в систему, его доставляют на кухонную приборную панель. Но если Боб набирает URL-адрес ./Home/Dashboard, нет ничего, что помешает ему зайти туда. Что нужно сделать, чтобы ограничить доступ Боба к любому другому URL-адресу?

Кроме того, когда пользователь регистрируется, должен ли я хранить информацию о его роли в сеансе?

Какова наилучшая практика для этой цели?

+0

Для проверки роли пользователей вы можете использовать пользовательский атрибут AuthorizeAttribute. Что касается хранения информации, либо сеанс, либо файлы cookie используются для таких вещей, как обычно (формы auth по умолчанию используют файлы cookie). – mattytommo

+0

любой пример будет высоко оценен. :) – mohsinali1317

+1

Конечно, см. Этот вопрос: http://stackoverflow.com/questions/15444630/custom-mvc-authorizeattribute-that-allows-for-multiple-role-membership – mattytommo

ответ

1

Вы можете выполнить все ваши требования в действии входа в HttpPost. См. Комментарии для дальнейших инструкций.

[HttpPost] 
[AllowAnonymous] 
public ActionResult Login(LoginModel model, string returnUrl) 
{ 
    // check first for field validations 
    if (!ModelState.IsValid) 
     return View(model); 

    // validate user agains database 
    var user = FindUser(model.UserName, model.Password); 
    if (user == null) 
    { 
     ModelState.AddModelError("", "Invalid username or password."); 
     return View(model) 
    } 

    // user is valid, sign in assuming forms authentication, however it's 
    // best practice to abstract following statement by use of some kind of authentication 
    // manager (refer to OWIN framework for a better approach). 
    FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe); 

    // when returnUrl param is provided 
    if (!String.IsNullOrEmpty(returnUrl)) 
     return Redirect(returnUrl); 

    // following 'if' - condition dependent on your domain models. 
    if (user.IsCook) 
     return RedirectToRoute(/*kitchen route*/); 
    else 
     return RedirectToRoute(/*dashboard*/); 
}