Разрешения в представлениях в ASP MVC - PullRequest
4 голосов
/ 16 декабря 2008

Я понимаю, что вы можете использовать проверку подлинности с помощью форм для предоставления / отказа в доступе к определенным страницам в соответствии с выбранными вами критериями.

Однако я хотел бы перейти к более конкретным аспектам и сказать, что для пользователей отображаются разные кнопки в зависимости от их прав.

Я знаю, что могу сделать что-то вроде

if(((User)ViewData["CurrentUser"]).IsEmployee).....

Но это не выглядит очень элегантно и может очень быстро запутаться.

Существуют ли какие-либо рекомендации / инструменты / функции фреймворка, которые могут мне помочь?

Ответы [ 3 ]

6 голосов
/ 16 декабря 2008

Используйте проверку подлинности на основе ролей, затем установите роли соответствующим образом. Тогда вы можете делать такие вещи, как:

if (ViewContext.HttpContext.User.IsInRole("vEmployee") {

Преимущество этого состоит в том, что это базовая функциональность ASP.NET - даже не специфичная для MVC - поэтому он будет работать со всеми возможными поставщиками членства.

Затем вы можете добавить перегрузку помощника вида для любого элемента управления, который вы хотите отобразить условно:

public static string TextBox(this HtmlHelper helper, 
    string name, string value, string role, object htmlAttributes)
{
   if helper.ViewContext.HttpContext.User.IsInRole(role) {
       return helper.TextBox(name, value, htmlAttributes);
   } 
   else
   {
       return null;
   }
}

... и назовите это:

<%= Html.TextBox("name", "value", "vEmployee", null) %>
1 голос
/ 16 декабря 2008

У меня была такая же проблема некоторое время назад для приложения WPF. Это может работать и для ASP.NET.

Для каждой «кнопки» (UserControl в WPF) вы устанавливаете по атрибуту роль, необходимую для выполнения его функций.

В начале действия вы создаете список всех «кнопок», для которых требуется специальное разрешение.

Перед вызовом метода «Return View ()» вы вызываете функции, которые повторяют все ваши специальные «Кнопки» и устанавливают их видимость в зависимости от роли пользователя.

Для WPF, который работает, потому что вы не можете вызвать метод с помощью запроса get / post ... Для Интернета вы должны сделать что-то более сложное, а не просто скрыть / показать кнопку ...

Надеюсь, это даст вам хотя бы подсказку ... Для моей реализации это работало довольно хорошо, но это был всего лишь прототип ... Но я думаю, что буду использовать его в будущем.

PS: образец кода можно найти здесь

0 голосов
/ 16 декабря 2008

Не делай этого. Используйте контроллер для такой логики

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...