logo

[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>
    }
}
В результате в данном портлете будет выводиться список всех авторизованных пользователей системы в виде их имен – ссылок на профиль.