2013-07-09 5 views
0

Я недавно унаследовал большой проект .NET, для которого требуется исправление роли. Различные роли имеют разный доступ к сайту, и некоторые элементы должны быть скрыты соответственно в отношении роли текущего пользователя.Унаследованный .NET 4.0 Веб-проект - Атрибуты для управления и обработки роли

Учитывая довольно гибкую и модульную архитектуру, это было достаточно легко реализовать, когда пользователи пытаются получить доступ к частям сайта, к которому у них нет доступа. Тем не менее, я столкнулся с проблемами при аутентификации видимости элементов управления.

Многие элементы управления были реализованы с помощью собственных элементов управления, связанных с конкретным проектом, однако ссылки в основном реализуются через HtmlAnchors, а некоторые другие поля, попадающие в ограниченную категорию, также являются универсальными элементами html.

Есть ли способ, которым я могу исправить это с помощью универсального адаптера, или мне нужно рыться в огромном массиве элементов управления и элементов, присутствующих в проекте, и заставить их наследовать общую базу, где это можно реализовать сингулярно? Ручной труд в этом случае будет означать лот работы, и я не совсем уверен, что это даже правильный подход в конце.

В принципе, существует ли способ заставить все элементы управления и элементы страницы проверять, должны ли они отображаться или нет в веб-проекте .NET 4.0? И могу ли я каким-то образом его исправить, чтобы все элементы могли принимать и обрабатывать новый атрибут, который описывает их «уровень ограничения»?

ответ

0

Да, вы можете делать такие вещи. Напомню, что вам могут помочь две функции ASP.NET:

  1. ASP.NET Tag Mapping. Эта функция позволяет вам изменить тип объекта, который создается, когда парсер находит определенный тег ASP.NET (так что вы можете, например, заменить все HtmlAnchors на SpecialHtmlAnchors, которые наследуются от какого-либо базового класса по вашему выбору). Вам просто нужно добавить раздел tagMapping под /system.web/pages/ в ваш web.config. (Я не проверял этот образец, но это должно быть близко к правильному. Это отправная точка, в любом случае.)

    <system.web> 
        <pages> 
        <tagMapping> 
         <add tagType="System.Web.UI.HtmlControls.HtmlAnchor, System.Web" 
         mappedTagType="My.Special.HtmlAnchor, MyAssembly"/> 
        </tagMapping> 
        </pages> 
    </system.web> 
    
  2. ASP.NET управления Адаптеры. Вы можете указать ASP.NET подключить выходной адаптер к каждому экземпляру определенного типа. Первоначально эта функция была предназначена для облегчения адаптации к выпуску для определенных браузеров или типов браузеров (например, настольных и мобильных), но вы можете делать все, что захотите, с ними. Чтобы использовать их, вы создаете файл .browsers в своей папке App_Browsers (если его не существует, щелкните правой кнопкой мыши на своем веб-проекте в VS, наведите курсор мыши над «Добавить папку ASP.NET» и выберите «App_Browsers». Затем добавьте ваш .browsers файл в эту папку через «Add New Item ...» диалог Зарегистрировать адаптер пользовательского управления, изменив файл .browsers выглядеть примерно так:.

    <browsers> 
        <browser refID="Default"> <!-- all browsers --> 
         <controlAdapters> 
          <adapter controlType="System.Web.UI.HtmlControls.HtmlAnchor" 
           adapterType="My.Custom.RolesAwareControlAdapter, MyAssembly" /> 
         </controlAdapters> 
        </browser> 
    </browsers> 
    

    адаптеры управления унаследовать от System.Web.UI.Adapters.ControlAdapter, который имеет почти все те же методы рендеринга, что и обычный элемент управления. ControlAdapter полностью контролирует рендеринг для элемента управления, но может делегировать его обратно в элемент управления Target, если он пожелает.

Что касается добавления новых атрибутов к вашим элементам управления: если вы уже собираетесь использовать существующий код и добавлять атрибуты, почему бы просто не изменить тип тега, чтобы ссылаться на пользовательский элемент управления, когда вы на нем?Публичные свойства настраиваемых элементов управления автоматически повышаются до атрибутов разметки, поэтому вы можете указать их значения во время разработки.

Еще один хороший подход WebForms - хотя он не исправит скуку редактирования сотен страниц и пользовательских элементов управления - это использовать LoginView, так как он предназначен для решения таких проблем, как ваш.

Дайте мне знать, если у вас есть вопросы; Я буду рад прояснить.

+0

Спасибо, это заставило меня задуматься. Я просмотрю программное обеспечение и посмотрю, что нужно сделать - может быть, мне действительно придется пройти многое из того, что уже сделано, и попытаться обобщить подход, чтобы я мог передавать атрибуты элементам управления , –

+0

Хорошо, теперь самое разумное решение в моем сознании, похоже, таково: Пройдите весь проект и настройте все связанные элементы управления таким образом, чтобы они наследовали проектный блок рендеринга, который имеет общедоступное свойство, которое определяет его роль - ограничение (в программе изображается небольшая переменная строка). Затем, когда мы создаем эти блоки, мы должны иметь возможность легко их скрыть. Это непросто, но в будущем это должно быть наиболее легко поддерживаемым и модульным. Любые мысли об этом подходе? –

+0

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

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

  • Нет связанных вопросов^_^