2012-08-23 2 views
0

Привет У меня есть проблема по настройке модуля администратора для веб-приложенияперенаправить пользователя на основе ролей?

  1. У меня было две роли в моей системе администратора и Tech
  2. Если перейти в модуль администратора система будет видеть, если он является администратором или нет
  3. Если пользователь не администратор будет перенаправить его на страницу

    к сожалению, вы не т иметь доступ к этой странице!

Я использовал Web.config, чтобы ограничить доступ к подкаталоге администратора

<?xml version="1.0"?> 
<configuration> 
    <system.web> 
     <authorization> 
     <allow roles="admin" /> 
     <deny users="*"/> 
     </authorization> 
    </system.web> 
</configuration> 

также у меня есть C# код, чтобы проверить, если зарегистрированный пользователь является администратором или другой

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (HttpContext.Current.User.Identity.IsAuthenticated) 
     { 
      if (Page.User.IsInRole("admin")) 
      { 
       if (!Page.IsPostBack) 
       { 
        DisplayRolesInGrid(); 
       } 
      } 
      if(!Page.User.IsInRole("admin")) 
      { 
       Response.Redirect("/accessPage.aspx"); 
      } 

     } 
    } 
+1

У вас есть вопросы? – aquinas

+0

Seconded - в чем вопрос? Какое ожидаемое поведение и что вы видите вместо этого? – JcFx

+0

проверка для кейс первый. Я имею в виду «admin» или «Admin». Если нет проблем с случаем. Тогда может помочь некоторый эксперт модуля администратора. Вы проверили, если вы получаете от, если (HttpContext.Current.User.Identity.IsAuthenticated) или нет – Sami

ответ

1

Не путайте эти два типа управления ролью друг с другом. Они исключают друг друга. Один в web.config, а другой - в коде через C#. Просто удалите часть доступа к web.config и используйте функцию codein Page_Load, как вы уже сделали.

protected void Page_Load(object sender, EventArgs e) 
{ 

     if (Page.User.IsInRole("admin")) 
     { 
      // all is good, do not do anything 
      // if you want to initialized something, do it here 
     } 
     else 
     { 
      // opps you do not have access here, take him somewhere else 
      Response.Redirect("/accessPage.aspx"); 
     } 


} 
+0

Действительно ли лучше использовать модель кода над web.config? Это означает, что он должен добавить похожий код на каждую страницу, где модель конфигурации проще и может охватывать весь каталог с одной строкой конфигурации? – JcFx

+0

yes, вы должны добавить этот код на все страницы, которым нужен доступ. Это зависит от дизайна. Часть Web.conf более мощная и более сложная. Код прост и работает :) –

+0

Я думаю, что web.config будет работать, если он удалит - но каждый их собственный :) Вы правы в том, что не используете их обоих, однако: На самом деле ничего не сломать, но это тоже не помогает. – JcFx

0

Не знаю, каков ваш вопрос, но я вижу хотя бы одну проблему: <deny users="*"/> означает отказ всем. Должно быть <deny users="?" />, чтобы не допустить проверку подлинности, а затем <deny roles="Tech" />, чтобы убедиться, что ваши пользователи не разрешены.

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