Я ищу способ реализовать авторизацию в своем веб-приложении, только определенные пользователи должны иметь доступ к конфиденциальным частям приложения. Я буду использовать аутентификацию windows, пользователи, добавленные в веб-конфигурацию, будут иметь право доступа к приложению, часть управления пользователями будет видна только авторизованным пользователям.
Пользователь с полными правами доступа должен сможет открыть раздел управления пользователями, который даст ему возможность редактировать права доступа для других пользователей или добавлять / удалять пользователей из веб-конфигурации, как это можно сделать с помощью диспетчера IIS.
Я использую ASP. NET Web Api с Angular 10. Что было бы хорошим методом для реализации такого подхода?
Я подумал сначала синхронизировать пользователей из веб-конфигурации с базой данных при запуске приложения. Я получу новых пользователей с доступом к приложению, которые добавляются через веб-конфигурацию вручную, с другой стороны, веб-конфигурация будет получать новых пользователей, которые были добавлены через раздел управления пользователями приложения. Правила авторизации будут храниться в базе данных, будут права доступа для определенных c частей приложения, я бы отправил такой объект во фронтенд:
{
"username": {
"email_list": true,
"calculation_area": false
}
}
И части приложения будет виден, если у пользователя есть доступ, например:
<nav class="menu">
<ul>
<li><a href="/main">Main</a></li>
<li><a href="/email_list" *ngIf="userHasAccessToEmailList()">Emails</a></li>
<li><a href="/calculation_area" *ngIf="userHasAccessToCalculationArea()>Calculation</a></li>
</ul>
</nav>
Я знаю, что это не DRY, потому что я проверяю на каждой части, есть ли у пользователя права доступа или нет, я буду искать лучший решение, но вы поняли теорию. Я буду использовать WindowsIdentity identity = HttpContext.Current.Request.LogonUserIdentity
, чтобы получить имя пользователя от человека, который просматривает приложение. Приложение будет работать под идентификатором, который имеет права доступа к некоторым источникам данных, которые я использую, поэтому мне нужно разделить текущего пользователя, который запускает приложение, и пользователя, который просматривает приложение через браузер. У меня будет информация о том, кто звонил в приложение при запуске, и я могу проверить, какие у него права доступа. Я бы скрывал части приложения, к которым у этого пользователя нет прав доступа, и при каждом http-вызове проверяйте права доступа для пользователя, который сделал запрос, возможно, защита маршрута angular - хороший способ справиться с этим logi c. Что ты думаешь об этом? Что нужно учитывать и где подводные камни?