Скрытие Html.ActionLinks на основе безопасности на основе ролей

Я использую @RenderSection ("Contextual", false) в моем _Layout.cshtml, чтобы позволить различным представлениям отображать там свой конкретный контент. У некоторых их нет, у других есть.

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

Я бы хотел предоставить @RenderSection ("Contextual" , false) в моем _Layout.cshtml, а затем укажите на конкретной странице все контекстные данные, которые имеют смысл для этой страницы и , чтобы соответствующий контроллер выполнял проверку того, может ли пользователь выполнить действие и, возможно, даже увидеть, что варианты существуют , но я не уверен, что думаю об этом правильно. Вот как обстоят дела в настоящее время:

Прямо сейчас у меня есть раздел в одном из моих файлов Index.cshtml, например:

@section Contextual {
  <div>@Html.ActionLink("Create New", "Create")</div>
  <div>@Html.ActionLink("Generate Report", "Report")</div>
  <div>@Html.ActionLink("Other Stuff", "Other")</div>
}

, а затем в моем соответствующем контроллере есть что-то вроде этого:

[Authorize(Roles = "Editor")]
public ActionResult Create()
{
   // stuff
}

Это будет работать так, как я хочу (не редакторы не смогут создавать новые элементы), но запись «Создать» доступна для всеобщего обозрения. Я могу сделать что-то вроде этого:

@section Contextual {
  @if (User.IsInRole("Editor"))
  {
     <div>@Html.ActionLink("Create New", "Create")</div>
  }
  <div>@Html.ActionLink("Generate Report", "Report")</div>
  <div>@Html.ActionLink("Other Stuff", "Other")</div>
}

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

Это разумный подход? Есть ли лучший способ подойти к этому?

6
задан itsmatt 6 May 2011 в 17:31
поделиться