Правильный способ иметь базу данных пользовательских запросов на пользовательские запросы на основе ролей на каждом запросе ASP.NET MVC

StackOverflow https://stackoverflow.com/questions/4531287

Вопрос

Это может быть немного невежественным вопросом, но я новичок в MVC, так что извините!

Я изучал модель Auth Auth Nerd, но в моем приложении у меня сложная аутентификация на основе ролей. Итак, что я делаю, так это:

 void MvcApplication_PostAuthenticateRequest(object sender, EventArgs e)
        {
            HttpCookie authCookie = HttpContext.Current.Request
               .Cookies[FormsAuthentication.FormsCookieName];
            if (authCookie != null)
            {
                string encTicket = authCookie.Value;
                if (!String.IsNullOrEmpty(encTicket))
                {
                    FormsAuthenticationTicket ticket = 
                            FormsAuthentication.Decrypt(encTicket);
                    CustomIdentity id = new CustomIdentity(ticket.Name);
                    GenericPrincipal prin = new GenericPrincipal(id, id.Roles);
                    HttpContext.Current.User = prin;
                }
            }
        }

На входе в систему я аутентификация имя пользователя/проход с FormsAuth, а затем создаю cookie.

Проблема здесь Каждый раз, когда я создаю пользовательскую идентичность, я должен Запросите базу данных для ролей пользователей. Анкет Есть ли правильный Вперед или я делаю правильные вещи, чтобы запрашивать БД по каждому входящему запросу? Должен ли я сохранить список ролей в cookie или что -то в этом роде?

Я также действительно не понимаю весь жизненный цикл того, как формы Auth заботятся об аутентификации? Я использую то же самое IFormsAuthentication Паттерн дизайна, который ужинал, и во время входа я звоню FormsAuth.SignIn() который в свою очередь вызывает FormsAuthentication.SetAuthCookie, Когда ему удастся вызвать membershipservice.validateuser() Метод ?? Также, если Автомобильный файл был установлен Зачем ужинам Nerd создать билет, затем добавлять его в запрос, а затем прочитать его во время PostAuthenticationRequest Чтобы проверить, какой это был пользователь. Операция билета как сеанс?

Спасибо! С Рождеством!


Обновлять : Эта ссылка дал мне немного лучшее понимание билета на аутентификацию форм.

Это было полезно?

Решение

Альтернативный подход состоит в том, чтобы хранить роли вашего пользователя в билете аутентификации, когда ваш пользователь будет аутентифицирован. Затем для каждого запроса (Application_AuthenticateRequest Метод файла Global.asax) вы можете извлечь роли из билета аутентификации и создать GenericPrincipal.

Смотрите этот ответ Больше подробностей.

Другие советы

"Правильный?" Это вопрос мнения.

Я бы сказал, что если у вас не возникает проблем с результатом работы базы данных, вызванной этим запросом, то не беспокойтесь об этом.

Если вы есть, вы можете централизовать свой код аутентификации в какого -то поставщика Auth Provider или Type, а также информация о аутентификации кэша в памяти, пока не обновит запись базы данных, которая должна одновременно аннулировать кэш.

(Ваш второй вопрос будет преуспеть само по себе; у меня недостаточно информации, чтобы ответить на него.)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top