Вы должны понимать, как работает цикл обработки событий. Я был здесь однажды, и однажды совершил одни и те же ошибки.
Попробуйте синхронизировать обратные вызовы, так как вы хотите последовательно, например, так:
router.get('/getTarrifDetails', (req, res, next) => {
let result = [], count = 0;
Tarrif.find().distinct('tarrif_type', (err, docs) => {
async.forEach(docs, async ele => {
try {
let userCount = await User.countDocuments({ tarrif_type: ele });
result.push(userCount);
} catch (err) {
//your err goes here.
}
})
});
});
Я не уверен, что это будет работать на 100%, но попробуйте и отладьте немного.
Я обычно прокручиваю свое собственное, так как Платформа.NET довольно полнофункциональна в этом отношении, но Вы могли бы попробовать Блок приложений Авторизации и Профиля MS.
Для безобразных деталей реализации Вы посмотрели на "принципалы"? Посмотрите мой ответ здесь. С этим подходом можно использовать основанную на ролях безопасность в коде - таком как:
[PrincipalPermission(SecurityAction.Demand, Role="ADMIN")]
static void SomeMethod()
{...}
Само время выполнения теперь проверит, что у пользователя должна быть Ваша "АДМИНИСТРАТОРСКАЯ" роль для вхождения в тот метод (очевидно, Вы могли также отключить опцию в UI путем проверки IsInRole(...)
). Очень мощный.
Если Вы не слишком увлечены изобретением велосипед, взглянули на продукт под названием Визуальная охрана. Это позволяет Вам легко добавлять безопасность к своему приложению с минимальной работой и имеет действительно полнофункциональный набор инструментов.
Если Вы испытаны с ASP.NET уже затем, Вы, вероятно, знакомы с Членством ASP.NET / Роль / система Профиля с поставщиками по умолчанию и способностью добавить Ваше собственное без слишком большого количества стычки.
Разве не было бы замечательно, если Вы могли бы использовать все это из Ваших Windows Forms или приложений WPF? Да? Хорошо затем взгляните на Прикладные службы ASP.NET! Вы просто запускаете веб-сайт, чтобы обеспечить URL аутентификации и затем сказать Вашему приложению использовать это. Можно создать собственное окно входа в систему и сделать, чтобы сервисы приложения открыли его при необходимости, или использовали собственную логику и назвали методы сами.
Это имеет полную поддержку 'режима офлайн', где это кэширует хеш пароля для сравнения с, это может также кэшировать роли и позволяет Вам использовать настройки Profile.