2014-01-29 5 views
5

На моем сайте ASP.NET MVC моя настройка позволяет пользователям иметь роли, а роли имеют разрешения. Как правило, эти разрешения устанавливаются для контроллера. В главном навигационном меню моего сайта пользователь, прошедший проверку, может видеть все элементы, даже если у них нет доступа к этой странице.Лучший способ получить доступ к разрешениям пользователей со стороны

В настоящее время я могу только настроить меню на выключение, если проверка подлинности пользователя:

@if (Request.IsAuthenticated){ } 

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

Спасибо за любой совет.

EDIT

К сожалению, я не был достаточно ясен. Это мое главное навигационное меню на странице _Layout. Кроме того, полномочия, назначенные роли, настраиваются администратором (они также могут создавать и удалять роли), поэтому проверка того, будет ли пользователь в роли не соответствовать моим потребностям.

ответ

3

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

Действие может выглядеть следующим образом:

[ChildActionOnly] 
public ActionResult Navigation() 
{ 
    var model = new NavigationModel(); 
    // populate the model.. 

    return PartialView("_Navigation", model); 
} 

Вы можете оказать такое частичное с вашей точки зрения (_Layout.cshtml в вашем случае), как это:

@Html.Action("Navigation", "Common") 

В большинстве случаев Request.IsAuthenticated просто отлично , Используйте это только в том случае, если вам нужно что-то более продвинутое.

+0

Отличная идея! Просто реализовал его, и он отлично работает. Огромное спасибо. – Jonesopolis

0

Лучшим способом было бы иметь свойство на viewmodel, которое использует вид.

+0

хорошо мое меню навигации в моем макете - все его виды используют – Jonesopolis

+0

, тогда я бы сказал, что Request.IsAuthenticated is fine –

1

Вы можете использовать Roles класс статический метод IsUserInRole:

@if (Roles.IsUserInRole("Admin")) 
{ 
    // ... 
} 
Смежные вопросы