На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> Смена MasterPage в зависимости от роли , asp.net 2.0, c#
    Здравствуйте.
    У меня есть несколько эталонных страниц. например authorized.master, unauthorized.master. Я хочу, чтобы если пользователь аутентифицирован, то выводилась страница default.aspx и эталонной для нее было authorized.master, в противном случае unauthorized.master.
    Естественно, можно для каждой страницы в методе Page_PreInit добавить строчки
    ExpandedWrap disabled
              if (this.User.Identity.IsAuthenticated) this.MasterPageFile = "authorized.master";
              else this.MasterPageFile = "unauthorized.master";

    Но как быть если страниц несколько(например 10-20). В каждую добавлять подобное не хочется.
    Первое что пришло в голову - написание модуля:
    ExpandedWrap disabled
      public class MasterChangeModule : IHttpModule
      {
          public void Init(HttpApplication app)
          {
              app.BeginRequest += new EventHandler(OnBeginRequest);
          }
       
          public void OnBeginRequest(object sender, EventArgs e)
          {
              HttpApplication app = sender as HttpApplication;
              if (app == null) return;
              if (app.Context.User.Identity.IsAuthenticated)
              {
                  // здесь можно как-то вытянуть из app.Context экземпляр Page?
              }
          }
       
          public void Dispose()
          {
          }
      }

    Но, как видите.. никак не могу сообразить как из контекста получить ссылку на экземпляр Page :D (если ее вообще можно получить)

    Или может есть варианты более приемлемые для моей задачи
      GarF1eld, Сделай базовый класс для всех страниц
      ExpandedWrap disabled
        class PageBase: System.Web.UI.Page{
        protected void Page_Preinit(...){
         if (this.User.Identity.IsAuthenticated) this.MasterPageFile = "authorized.master";
                else this.MasterPageFile = "unauthorized.master";
        }
        }

      и каждую страницу своего сайта унаследуй от нее
      ExpandedWrap disabled
        class _Default: PageBase
        ....
        class Register:  PageBase
        ...
        GRIENDERS, это было у меня в мыслях.. но почему-то этот вариант кажется мне не очень :wub:
          Кстати, самый нормальный вариант :yes:
            Есть еще контролы типа LoginView, который управляет появлением того или иного контента в зависимости от роли юзверя и статуса его аутентификации.
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0443 ]   [ 17 queries used ]   [ Generated: 24.04.24, 11:25 GMT ]