2010-03-18 4 views
0

В моем веб-приложении я хотел бы показать ссылку меню «Администратор» только для пользователей, которые были добавлены в базу данных в качестве администратора.Показать/скрыть пункты меню в зависимости от зарегистрированного пользователя

Что было бы лучшим способом сделать это в ASP.NET MVC 2?

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

Если это помогает, я использую Windows Auth.

+0

Может быть связано - http://stackoverflow.com/questions/1968772/asp-net-mvc-database-driven-menu-with-caching, http://stackoverflow.com/questions/723994/best-way -в-проводной вверх на основе баз данных меню-в-Asp-нетто-MVC, – Ahmad

ответ

0

Возможно, вы можете сохранить состояние администратора в переменной сеанса или что-то в этом роде, но, похоже, более целесообразно создать частичный вид с помощью меню (если вы еще этого не сделали) и просто проверить там. У вас по-прежнему будет вызов базы данных для каждого запроса на страницу, но нет дублирования кода. И если у вас нет проблем с производительностью прямо сейчас, один дополнительный вызов действительно не такой большой сделки.

Если у вас есть проблемы с производительностью, убедитесь, что вы оптимизировали свой собственный код, имеете все правильные индексы на db и т. Д. Многое увеличение производительности (особенно в проблемах, связанных с db) обычно можно сделать путем реструктуризации как все сделано, вместо какой сделан.

UPDATE:
В ASP.NET MVC 2 есть на самом деле даже лучше, как вы могли бы сделать это, объединяющие Html.RenderAction() и AuthorizeAttribute (или, возможно, написать свой собственный унаследованный атрибут, который устанавливает флаг вместо того, чтобы возвратить ошибку, когда пользователь не авторизовался). Таким образом, вы должны минимизировать логику представления и лучше соответствовать принципам MVC.

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