ASP.NET MVC - показать / скрыть ссылку на веб-страницу на основе роли службы каталогов Microsoft - PullRequest
0 голосов
/ 25 января 2019

Вот что я пытаюсь сделать: Мое (очень маленькое) веб-приложение предоставляет форму, которая будет использоваться публикой. В этой форме есть ссылка, которая должна быть видна только тем, кто был назначен на роль определенного отдела в моей компании: «Маркетинг» через Microsoft Active Directory. Это первый раз, когда я работал с Active Directory Microsoft И с любой формой аутентификации, поэтому, пожалуйста, будьте осторожны.

Я внес изменения в права доступа к сайту в IIS И в своем файле web.config, в корне добавил:

<authentication mode="Windows"/>
 <authorization>
  <allow roles="Marketing"/>
  <deny users="*" />
</authorization>

А в коде страницы формы ссылка представлена ​​следующим образом:

@if (User.Identity.IsAuthenticated)
    {
        <p>@User.Identity.Name</p>
        <p></p>
        @Html.ActionLink("Access to Backend", "Index", "Requests")
    }

Я понимаю, что при этом вся форма становится недоступной для тех, кто находится за пределами роли, поскольку приведенный выше код не ограничивает проверку подлинности ссылкой, а применяется ко всему сайту (поскольку он находится на корневой уровень).

Структура сайта выглядит следующим образом:

--Form Page (open to public)
 /Form (with hidden link to the Backend Page/Counts) -- needs to be hidden
---Backend Page (restricted to Marketing page)
 /Counts
 /Edit
 /Delete
 /Details

Как мне ограничить ее маленькой ссылкой, а затем ограничить доступ к внутренним страницам сайта теми, которые находятся на странице "Маркетинг"?

1 Ответ

0 голосов
/ 12 марта 2019

Я знаю, что этому больше месяца.Извините, что на это не посмотрели.Может быть, вы нашли ответ, но я все равно поделюсь.

Извлеките тег authorization из вашего web.config.Вместо этого примените роль к своим контроллерам (или отдельным действиям), используя AuthorizeAttribute, например:

[Authorize(Roles = "Marketing")]

При проверке подлинности Windows роли представляют собой группы AD, поэтому вам следуетиметь группу в том же домене, что и сервер под названием «Маркетинг», чтобы это работало.Если группа находится в другом домене, вам нужно указать домен, например

[Authorize(Roles = "DOMAIN\Marketing")]
...