2013-12-21 1 views
1

У меня возникли проблемы с пониманием того, как механизм роли работает с ASP.NET.Назначить роль пользователю при каждом входе на страницу входа в FormAuthentication в ASP.NET?

У меня есть база данных Microsoft SQL Server, где все уже настроено, и я не хочу добавлять/удалять/изменять таблицы. В таблице «Пользователи» есть поле, в котором указывается «Роль» пользователя по идентификатору, ссылающемуся на запись в таблице «Типы». Я хочу использовать это поле, чтобы различать пользователей по их типам (который может быть администратором, премиум или стандартным, например).

Невозможно ли назначить роль пользователю каждый раз, когда он подключается?

Я имею в виду что-то вроде этого в Login.aspx.cs:

protected void btn_login_Click(object sender, EventArgs e) 
{ 
    // On authentifie l'utilisateur via la BLL 
    BusinessLogicLayer bll = new BusinessLogicLayer(); 

    Utilisateur user = bll.authenticate(txt_login.Text, txt_password.Text); 

    // SUCCEEDED AUTH 
    if (user != null) 
    { 
     // Ajout de l'utilisateur à son role correspondant 
     if (user.Type1.nom == "lecteur") 
      Roles.AddUserToRole(user.login, "lecteur"); 

     else if (user.Type1.nom == "journaliste") 
      Roles.AddUserToRole(user.login, "journaliste"); 

     else if (user.Type1.nom == "administrateur") 
      Roles.AddUserToRole(user.login, "administrateur"); 

     FormsAuthentication.RedirectFromLoginPage(user.login, cb_remember.Checked); 
    } 

    // FAILED AUTH (si on arrive jusqu'ici vu qu'on a pas été redirigé) 
    else 
     lbl_invalidCredentials.Visible = true; 
} 

Я уже прочитал учебник на веб-сайте ASP.NET, но он использует специфическую конфигурацию базы данных, которую я не могу реализовать.

+1

Это звучит, как ваши "роли" механизм не совместим с установкой роли поставщика ASP.NET , (Для каждого пользователя требуется ровно одна роль, в то время как обычно ASP.NET позволяет использовать для многих-многих пользователей к ролям.) Вы можете попытаться написать собственный поставщик роли, но вы не сможете выполнить весь интерфейс , – David

+0

Пользовательский поставщик роликов звучит как путь наименьшего сопротивления здесь - http://msdn.microsoft.com/en-us/library/8fw7xh74.aspx –

+0

Внедрение настраиваемого ролевого провайдера кажется слишком тяжелым для моего базового веб-сайта ASP.NET , Я думаю, что я собираюсь перейти к более простой опции: не использовать роли и проверять код на каждой странице, если пользователь является администратором или нет. – gilgha

ответ

0

менеджер Роль использования в ASPDBNET.mdf (статус) по умолчанию.

, если вы хотите создать пользовательский поставщик роли попробовать это:

How to: Sample Role-Provider Implementation

Update:
вы можете использовать Session вместо диспетчера ролей:

в странице входа:

Session["role"] = "lecteur" ; 

в странице администратора:

if(Session["role"]!=null) 
{ 
    if(Session["role"]=="lecteur") 
    { 
     //welcome admin 
    } 
    else 
    { 
     //access denied 
    } 
} 
else 
{ 
    //access denied 
} 

Update

или вы можете использовать role provider into linq

+0

Реализация настраиваемого ролевого провайдера кажется слишком тяжелой для моего базового веб-сайта ASP.NET. Я думаю, что я собираюсь перейти к более простой опции: не использовать роли и проверять код на каждой странице, если пользователь является администратором или нет. – gilgha

+0

@gilgha мой ответ обновлен –

+0

Хорошо, но можно ли ограничить доступ из целого каталога (каталога администратора) тегом в файле Web.config с помощью этого решения? Или мне придется выполнять собственные проверки в коде за каждой страницей администратора? – gilgha

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