Один из вариантов - разделить ваш взгляд на дочерние действия:
@{Layout = "~/Views/Shared/Layouts/MasterLayout.cshtml";}
<div class="splitter">
<div class="left-column">
@Html.Action("Navigator")
@Html.Action("MyPosts")
</div>
<div class="main-content">
@Html.Action("RecentStories")
@Html.Action("Adverts")
</div>
</div>
Затем в вашем контроллере каждое действие решает, сможет ли текущий пользователь увидеть этот фрагмент контента, например,
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult RecentStories()
{
if(current_user_cannot_access_this_content())
return View("BlankView"); // Might want to render some place holder content
// Setup necessary view data by pulling back content from the database.....
return View(); // Render the /Views/<controller>/RecentStories.cshtml view
}
Попробуйте по возможности кэшировать данные о правах пользователя для дочерних действий (зависит от того, как работает ваш расчет того, что видит пользователь).
Этот код предполагает, что все ваши действия выполняются на одном контроллере.Вы можете использовать другой контроллер для дочернего действия, просто передав имя контроллера в качестве второго параметра.