Я недавно разработал проект, в котором есть набор страниц, обращенный к пользователю, и набор страниц администратора.
Способ, которым я структурировал свой проект, примерно такой:
|- AppModule
|-- app components
|-- app services
|-- app routing
|
|- SharedModule
|-- components
|
|- AdminModule
|-- admin components
|-- admin services
|-- admin routing
И AppModule, и AdminModule импортируют SharedModule. AdminModule лениво загружается из моего root пути администратора в AppRouting следующим образом:
{
path: 'admin',
canLoad: [AdminGuardService],
loadChildren: () => import('../modules/admin/admin.module').then(m => m.AdminModule)
}
Где AdminGuardService - защита маршрута, которая проверяет, есть ли у текущего пользователя доступ администратора.
Преимущество Ленивый загруженный модуль состоит в том, что он скомпилирован отдельно от AppModule и загружается браузером только при попадании моего пути администратора. Я сохраняю все свои заданные администратором c http-вызовы в моих службах администратора, чтобы они никогда не входили в мой основной комплект приложений.
С точки зрения безопасности ничто не мешает пользователям без прав администратора угадывать ваши URL администратора независимо от того, находится ли он в том же проекте или в другом проекте. Вся моя авторизация на сервере выполняется моим API. Поэтому, если пользователь без прав администратора угадывает URL-адрес администратора, он получит 401, и я перенаправлю его обратно в основное приложение.