[ELMA3] Получение списка пользователей онлайн
В системе ELMA существует возможность отслеживать пользователей, которые в данный момент авторизованы в системе или ELMA Агенте. В статье приведен сценарий получения списка пользователей онлайн.
Пример сценария с использованием PublicAPI
Примечание
Актуальная документация по PublicAPI доступна по ссылке.
Внимание!
Сценарий, указанный ниже, актуален для версий системы ELMA с 3.8 включительно до 3.12.1 включительно.
Пространство имен:
1 | using EleWise.ELMA.API; |
Текст сценария:
1 2 3 | //получаем все активные сессии var activeSessions = PublicAPI.Services.Authentication.GetActiveSessions(); var users = PublicAPI.Portal.Security.User.FindByIdArray(activeSessions.Select(c => ( long )c.UserId).ToArray()); |
Пример сценария без использования PublicAPI
Пространства имен:
1 2 3 | using EleWise.ELMA.Services; using EleWise.ELMA.Security.Services; using EleWise.ELMA.Security.Managers; |
Текст сценария:
1 2 3 4 | var authService = Locator.GetServiceNotNull<IAuthenticationService>(); //получаем все активные сессии var activeSessions = authService.GetActiveSessions(); var users = UserManager.Instance.FindByIdArray(activeSessions.Select(c => ( long )c.UserId).ToArray()); |
Теперь переменная users, которая находится в теле цикла foreach, хранит все совпадения Id, т.е. всех авторизованных пользователей.
Наиболее удобное применение этого сценария – создание портлета типа «Код» для выведения всех авторизованных пользователей на главную страницу. Подробнее о данном портлете см. соответствующую статью.
Для этого создадим портлет, и в окне разметки разместим следующий код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <script type= "text/javascript" > function showUserInfo(id) { createAndLoadWindow(ТUserInfoWindowТ, { title: ’Информация о пользователе’, width: 800 }, Т/Security/User/ProfileInfo/Т + id); } </script> @ using EleWise.ELMA.Security.Models @ using EleWise.ELMA.Model.Managers @ using EleWise.ELMA.Security.Services @ using EleWise.ELMA.Security.Managers @ using EleWise.ELMA.Services <h2>Пользователи онлайн</h2> @{ var authService = Locator.GetServiceNotNull<IAuthenticationService>(); var activeSessions = authService.GetActiveSessions(); } @{ var users = UserManager.Instance.FindByIdArray(activeSessions.Select(c => ( long )c.UserId).ToArray()); foreach (var user in users) { <p><a href= "javascript:showUserInfo(@user.Id);" >@user.FullName</a></p> } } |
В результате в данном портлете будет выводиться список всех авторизованных пользователей системы в виде их имен – ссылок на профиль.