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