Разрешения и представления пользователей asp.net mvc

кажется, есть 2 варианта при работе с разрешениями безопасности для представлений в mvc:

  1. либо обрабатывать логику управления разрешениями в контроллере и направлять пользователя к соответствующему представлению...
  2. Или реализовать некоторую форму расширений HtmlHelper с учетом безопасности, которые отображают (или нет) соответствующие поля/данные формы.

я пропустил какие-либо другие варианты здесь? первый кажется смехотворно НЕСУХИМ, а второй, кажется, противоречит определению вида...

поэтому мой вопрос: есть ли лучший способ?


person E Rolnicki    schedule 13.02.2009    source источник


Ответы (1)


Я не согласен с идеей, что (2) противоречит идее представления. Рендеринг или не рендеринг конкретного компонента представления в зависимости от данных, полученных от контроллера, кажется мне совершенно уместным. Независимо от того, решите ли вы потребовать, чтобы данные были в модели, или их можно использовать из других ресурсов сервера, я думаю, зависит от того, насколько педантичным вы хотите быть. Я предпочитаю быть прагматичным и просто использовать то, что предоставляется, а не создавать новую модель только для хранения информации, связанной с ролью, поэтому в некоторых обстоятельствах (ссылка на мой элемент управления меню) я просто выполняю проверку роли в логике представления.

Важно помнить, что MVC — это шаблон, а не изречение. Там, где узор работает против вас, можно немного его согнуть. Точно так же DRY — это принцип, а не закон. Если кажется, что лучше повторить небольшой код, чтобы лучше достичь цели, продолжайте и повторите его. Поймите, что вы создаете себе проблемы с обслуживанием, но не позволяйте жесткой приверженности принципу удерживать вас от «правильных действий».

person tvanfosson    schedule 13.02.2009
comment
мне кажется, вы бы использовали либо/или/оба метода... не лучше ли было бы пойти по соглашению и выбрать 1? - person E Rolnicki; 13.02.2009
comment
Это означало бы наличие отдельного представления для каждой потенциальной комбинации ролей, и это кажется слишком большим нарушением DRY, ожидающим своего появления. Я предпочитаю рассматривать это в каждом конкретном случае и обычно прибегаю к (2), а не (1). Я могу вспомнить только один случай, когда я сделал (1). - person tvanfosson; 13.02.2009
comment
-пояснение: я имел в виду выбрать один ... не в буквальном смысле выбрать номер 1 - person E Rolnicki; 13.02.2009
comment
Понятно, но у меня есть два примера: мое главное меню, в котором различия связаны с ролями, и разница в содержимом, где содержимое меняется в зависимости от того, существует ли связь между двумя объектами или человек, просматривающий первый объект, является администратором — которые хотят быть обработаны с помощью каждого. - person tvanfosson; 13.02.2009