2015-03-31 2 views
-1

У меня есть приложение asp.net на основе C#, которое выполняет аутентификацию на основе форм, а также требует авторизации.Как заполнить роли пользователя (Identity) для веб-приложения, когда роли хранятся в базе данных SQL Server

Вот упрощенная версия User таблицы (SQL Server)

UID UName PasswordHash Userroles 
---------------------------------------------- 
1  a GERGERGEGER Proivder;Data Entry 
2  b WERGTWETWTW HelpDSK; UserNamager 
... 
... 

Я хорошо знаком с частью проверки подлинности. Но для авторизации я не уверен, что это лучший способ:

Я знаю, что когда пользователь авторизовался, вы можете использовать объект Identity, чтобы получить его/ее информацию.

Вопрос в том, что мой выбор читать зарегистрированные роли пользователя на каждой странице, кроме как каждый раз, когда вы вызываете эту таблицу БД, чтобы получить их?

+0

Я редактировал свой титул. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –

+0

Понял, tnx. –

ответ

-1

Я не уверен, что это вопрос SQL Server. Это вопрос ASP.NET.

Аутентификация форм ASP.NET позволяет приложению определять «Принципала», который (среди прочего) содержит массив строк, известных как «роли». Вы можете заполнять роли из БД один раз (когда пользователь подписывается), затем сериализуйте принципала в билет проверки подлинности форм, который становится зашифрованным файлом cookie в браузере. ASP.NET декодирует файл cookie с каждым HTTP-запросом и предоставляет его на ваш код ASP.NET C# через HttpContext.User. Затем он может извлекать роли из контекста и никогда не должен снова разговаривать с БД.

Сохранение роли будет выглядеть как this:

string roles = "Admin,Member"; 
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(
    1, 
    userId, //user id 
    DateTime.Now, 
    DateTime.Now.AddMinutes(20), // expiry 
    false, //do not remember 
    roles, 
    "/"); 
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, 
            FormsAuthentication.Encrypt(authTicket)); 
Response.Cookies.Add(cookie); 
+0

Вы можете заполнить роли из БД один раз. Как? Предположим, что я получил роли из БД. как заполнить этот принцип? и как сериализовать это на билет аутентификации? –

+0

Это слишком широкая тема. Сначала вам нужно понять аутентификацию форм, и есть несколько шагов по его кодированию и настройке. Я предлагаю вам начать [здесь] (https://msdn.microsoft.com/en-us/library/ff649204.aspx) и вернуться к StackOverflow, когда у вас есть конкретный вопрос. –

+0

Я хорошо знаком с аутентификацией. Я заметил, что мой вопрос касается авторизации, а не аутентификации. –

Смежные вопросы