Как сохранить представления свободными от логики авторизации в mvc?

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

У меня есть требование для отображения только действий, которые текущему пользователю разрешают сделать, но я не хочу создавать помехи представлениям авторизацией если-else's

Презирайте того, что он очень общее требование, я не могу найти реальный удовлетворительный способ сделать его.

Мой лучший подход до сих пор должен предоставить перегрузку Html.ActionLink дополнительный метод, который берет разрешение попросить, но там будет более сложными сценариями, как сокрытие всех блоков HTML или переключения текстового поля для label+hidden.

Существует ли лучший способ сделать это?

5
задан David Lay 27 April 2010 в 19:43
поделиться

3 ответа

Один из примеров, который я могу придумать, - это вызвать Html.RenderAction (ссылка: http://msdn.microsoft.com/en-us/library/ee703490.aspx ), а затем передать ссылку, которую вы хотите использовать в качестве значения маршрута к методу действия (она будет отображаться как параметр вашего действия). Поскольку это RenderAction, вы можете вернуться к процессу контроллера и, таким образом, вы можете сделать так, чтобы он отображал любое представление или данные, которые вы хотите, в зависимости от состояния пользователя.

Пример:

<% Html.RenderAction("Permissions" /* Controller */, "PermissionLink", new { Url = "Admin.aspx" }); %>

И ваш контроллер будет иметь что-то вроде:

public ActionResult PermissionsLink (string url)
{
     // Do Whatever kind of Authentication you want here, Session is available, etc

     if(authenticated)
        return View("Link");
     else
        return View("Blank");
}
2
ответ дан 15 December 2019 в 06:19
поделиться

У нас была такая же проблема. В итоге мы написали множество вспомогательных методов, а в случаях, когда требовалось много вывода html, мы помещали их в частичные представления.

0
ответ дан 15 December 2019 в 06:19
поделиться

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

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

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

К тому времени, когда View вызывается для выполнения своей работы, все важные «решения» должны быть уже приняты.

0
ответ дан 15 December 2019 в 06:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: