Сохранение информации для входа и другой безопасной информации, связанной с именем пользователя - PullRequest
0 голосов
/ 14 декабря 2011

В настоящее время я использую «стандартный» логин, когда вы аутентифицируете пользователя с помощью sqlcheck и cookie для хранения информации. (Как показано в примере кода). Теперь я хочу хранить больше информации о клиенте здесь. Например, если он вошел в систему как администратор или нет, какой отдел он выбрал для аутентификации и т. Д. Каков наилучший подход для этого? (Сессия, кеш, хранить информацию о правах на пользователя)

Осматривался, но не нашел лучшего ответа относительно безопасности и стандартов для каркаса MVC3. Так как я новичок в MVC, я хочу сразу же "вникнуть" в правильные привычки ... любые предложения / мнения приветствуются.

public ActionResult Index()
    {
        return View();
    }

    [HttpPost]
    public ActionResult Index(LoginModel model)
    {
        if (ModelState.IsValid)
        {
            if (model.Username == "qwe" && model.Password == "qwe")// Proper 
                                   sql authentication to be implemented here
            {   
                FormsAuthentication.SetAuthCookie(model.Username, false); 
                // True or false determents if its a persistent coockie or not



            return RedirectToAction("Index", "Home");
            } 
            {
                ModelState.AddModelError("", "Wrong login information");
            }
        }
        return View();
    } 

Ответы [ 2 ]

0 голосов
/ 14 декабря 2011

Для аутентификации вы должны использовать что-то на основе IPrincipal, например FormsAuthentication или WindowsAuthentication. Вы должны использовать атрибут [Authorize] для предотвращения доступа и для контроля того, какие роли имеют доступ к методу (например, [Authorize(Roles = "Administrator")]).

Для более точной аутентификации вы выбираете метод User.Identity.IsAuthenticated или User.IsInRole() (т.е.

@if (User.IsInRole("Administrator")) {
    <your code for only an administrator>
}

Вы можете использовать ту же технику для поиска роли отдела, если хотите, или для поиска отдела по его идентификатору пользователя, используя User.Identity.Name.

0 голосов
/ 14 декабря 2011

Вы используете поставщика членства aspnet sql? Если это так, вы можете использовать атрибут [Authorize] с ролями. Таким образом, вы можете заблокировать базу сайта на роль сайта, такую ​​как администратор. Вы можете расширить членство поставщика, чтобы иметь пользовательские свойства для каждого пользователя. Трудно сказать, будет ли этого достаточно. Я думаю, что нам нужно знать, какие свойства пользователя вы хотите добавить и какие функции они предоставляют. Например, если они находятся в отделе, что они могут делать или не делать.

...