[ELMA3] Получение списка пользователей онлайн
В системе ELMA существует возможность отслеживать пользователей, которые в данный момент авторизованы в системе или ELMA Агенте. В статье приведен сценарий получения списка пользователей онлайн.
Пример сценария с использованием PublicAPI
Примечание
Актуальная документация по PublicAPI доступна по ссылке.
Внимание!
Сценарий, указанный ниже, актуален для версий системы ELMA с 3.8 включительно до 3.12.1 включительно.
Пространство имен:
using EleWise.ELMA.API;
Текст сценария:
//получаем все активные сессии var activeSessions = PublicAPI.Services.Authentication.GetActiveSessions(); var users = PublicAPI.Portal.Security.User.FindByIdArray(activeSessions.Select(c => (long)c.UserId).ToArray());
Пример сценария без использования PublicAPI
Пространства имен:
using EleWise.ELMA.Services; using EleWise.ELMA.Security.Services; using EleWise.ELMA.Security.Managers;
Текст сценария:
var authService = Locator.GetServiceNotNull<IAuthenticationService>(); //получаем все активные сессии var activeSessions = authService.GetActiveSessions(); var users = UserManager.Instance.FindByIdArray(activeSessions.Select(c => (long)c.UserId).ToArray());
Теперь переменная users, которая находится в теле цикла foreach, хранит все совпадения Id, т.е. всех авторизованных пользователей.
Наиболее удобное применение этого сценария – создание портлета типа «Код» для выведения всех авторизованных пользователей на главную страницу. Подробнее о данном портлете см. соответствующую статью.
Для этого создадим портлет, и в окне разметки разместим следующий код:
<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> } }
В результате в данном портлете будет выводиться список всех авторизованных пользователей системы в виде их имен – ссылок на профиль.