Я использую @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>
}
И это работает достаточно хорошо, скрывая ссылку «Создать» от пользователей, не являющихся редакторами, но я сомневаюсь в том, хорошо ли это делать или нет, плюс я вижу это внизу дорога У меня ситуация, когда правила меняются, а затем у меня есть два местоположения, которые нужно синхронизировать: атрибут действия контроллера и код в представлении.
Это разумный подход? Есть ли лучший способ подойти к этому?