Управление ролями и пользователями на сайте

Роли определяют полномочия пользователя в системе. У каждого пользователя может быть несколько ролей. Назначением ролей заведует администратор системы (статью по описанию интерфейса администратора-разработчика можно прочитать здесь).

Создание Ролей

Управление ролями осуществляется в меню Пользователи / Роли (/roles). Здесь расположена таблица Роли (roles).

Создание пользователей осуществляется в разделе Роли и пользователи / Пользователи (/members) кнопкой Создать пользователя.
При этом открывается модальное окно (форма registrationUserInRole), где необходимо указать логин, пароль, email и выбрать одну из имеющихся ролей для создаваемого пользователя.

В таблице as_users хранятся общие данные по пользователям (телефон, почта и т. д.).

Логин пользователя - латинскими малыми буквами без дефисов и пробелов (например, фамилия человека и инициалы, часто логином может служить e-mail).

Доступ в системе назначается на основании ролей, поэтому необходимо давать пользователю минимальный набор ролей, необходимый для работы этого пользователя.

Структура данных по пользователям

Таблица Пользователи

На странице Пользователи (/members) расположена таблица управления пользователями.

Для более детальной информации по людям используются Контакты (ctr_contacts), связь идет по username. Контакты привязаны к неким Контрагентам (ctr_contragents). И эти контрагенты уже привязаны к различным бизнес сущностям (например, поставщики, клиенты и т.д.).

Для аватара пользователя используется ресурс userImage.

Если при регистрации нового пользователя необходимо сразу помещать информацию о нём в Контакты, Контрагенты, и возможно еще и в специализированную таблицу (перечень поставщиков, клиентов, подрядчиков, либо партнеров и т.д.), то обработку этих вставок вам необходимо добавить в форму регистрации нового пользователя (registrationUserInRole).

Информационное окошко по пользователю

Из таблицы Пользователи в первом столбце (i) есть выход на модальное окошко userInfo. Здесь выводится аватар пользователя (ресурс userImage) и информация из as_users в кратком виде на просмотр.

Страница Мой профиль

На странице профиля (/user) выводится форма Управление пользователем (editProfile). Здесь есть возможность редактировать данные по пользователю из as_users.

Страница пользователя

На странице Пользователь (/member?username=...) выводится форма user с данными из as_users на просмотр, ресурсом userImage, а также перечнем всех ролей пользователя с возможностью редактирования (флажки).

Изменение принадлежности к ролям

Как правило страница с перечнем пользователей, а также страницы с информацией по отдельным пользователям доступна Администратору сайта. В его полномочиях изменять набор ролей, в которые входит пользователь.

Сделать это можно на странице пользователя на форме user. Одна из колонок представлена типом Флажки, в которую выбираются все имеющиеся в системе роли. Администратор выставляет флажки напротив выбранных ролей для конкретного пользователя.

Отслеживание пользователей онлайн

На сайте можно показывать онлайн пользователь или нет.

Для этого используется разметка:

<div class="as-online" data-username="demo1"></div>

Пример использования также можно увидеть в таблице Пользователи.

as.sys.loadLib({
            jslink: as.options.jsLoadableURLFormat.format("as.online"),
            csslink: "",
            conditionObject: as.online,
            callback: function () {
                as.online.reInit();
            },
            isCacheable: true
});

Вы можете изменить вывод разметки элемента через функцию as.onlineGetOnlineMakeup: 

as.onlineGetOnlineMakeup = function(st){
  var s = "";
  return s;
}

Вход и регистрация через социальные сети

На странице входа (см. также Настройка страницы входа) можно реализовать возможность входа и регистрации через социальные сети. Для этого используйте сервис uLogin (действий на внешнем сервисе не требуется выполнять). 

Для этого необходимо реализовать следующие процедуры:

Настройка параметров виджета социальных сетей

CREATE procedure [dbo].[user_getSocialSettings]
AS
BEGIN
     SELECT 1 [Enabled], 'panel' Display, 'classic' Theme,
         'first_name,last_name,email' Fields,
         'facebook,instagram,vkontakte,odnoklassniki' Providers,
         'crm' RegRole, 'soc-{email}' UsernameFormat -- uid, email

END

Важные параметры:

Настройка кастомной процедуры создания пользователя (необязательная)

Данная процедура вызывается после создания системного пользователя и назначения ему роли RegRole. Ее можно использовать для создания дополнительных объектов в базе и подготовки письма.

CREATE PROCEDURE[dbo].[user_createSocialUser]
     @username nvarchar(128), @role nvarchar(64), @email nvarchar(128), @firstName nvarchar(128), @lastName nvarchar(128), @network nvarchar(128), @uid nvarchar(128), @verifiedEmail nvarchar(128), @url nvarchar(256)=''


  -- ВАЖНО. Параметр добавился 06.11.19
AS BEGIN
   -- создание дополнительных объектов
   SELECT 1 Result, '' Msg, 'Регистрация' EmailSubject,
       @username + ' - ' + @role + ' - ' + @email + ' - ' + @firstName + ' - ' + @lastName + ' - '+ @network + ' - ' + @uid + ' - ' + @verifiedEmail EmailBody

END

В параметре @url передается исходный адрес страницы, например, /account/login/supplier (чтобы можно было регистрировать пользователей под разные роли) исходя из URL.
Выходная модель содержит стандартные Result (1 если все хорошо) и Msg (текст ошибки), а также EmailBody и EmailSubject.
Письмо отправляется только если EmailBody непустое.

Примечание
Для регистрации пользователей для разных ролей, необходимо видоизменять ссылку, например:
/account/login/supplier
/account/login/customer

В итоге этот адрес передается в параметре @url в процедуру user_createSocialUser. В ней вы можете сравнить url и назначить соответствующую роль.
ВАЖНО. Никогда не назначайте роль беря название прямо из параметра!!! (в него могут передать все что угодно, например значение admin)

Отслеживание действий пользователя

В таблицу as_trace автоматически логируются записи по следующим событиям:

Таким образом можно увидеть когда (поле created) какое (поле code) где именно и какого рода (поля header и text) событие возникло у пользователя (поле username). 
См. более подробно про события в trace
 
На странице /diag есть возможность отслеживать динамику по кодам trace.
 
Примечание: Вы и сами можете вставлять записи в as_trace с собственным кодом, чтобы отслеживать некие события.
Например, при регистрации нового пользователя можно добавлять в as_trace запись с кодом reg, в header указывать роль с которой был зарегистрирован пользователь,

а в text логин и пароль зарегистрировавшегося пользователя.
Страница-источник на сайте falconspace.ru