Falcon Space. Подсистема Роли и пользователи

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

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

Управление ролями осуществляется в меню Пользователи / Роли (/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. Одна из колонок представлена типом Флажки, в которую выбираются все имеющиеся в системе роли. Администратор выставляет флажки напротив выбранных ролей для конкретного пользователя.

Используются следующие системные хранимые процедуры:

  • Получение ролей пользователя с помощью aspnet_UsersInRoles_GetRolesForUser
  • Удаление роли с помощью aspnet_UsersInRoles_RemoveUsersFromRoles
  • Добавление роли с помощью aspnet_UsersInRoles_AddUsersToRoles

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

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

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

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

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

  • По периоду (по умолчанию 30 сек) будет опрашиваться страница и обновлять эти элементы, если они присутствуют (т. е. вставляться значок с text-success или text-danger). Т.е. данная разметка принимает вид только значка без дополнительных элементов.
  • Если необходимо принудительно вызвать запуск обновления статусов, то используйте JS функцию as.online.reInit();

Страница входа в систему

Страница входа сделана вне рамок движка рендеринга страниц (т.е. не через стандартную форму системы). 
Вы можете добавить ссылки на Регистрацию и Восстановление пароля на странице.
Для этого используйте в глобальном CSS:
.regBtn, .forgotpasswordBtn{ display: inline-block !important;}

Кнопки будут ссылаться на страницу /reg и /forgot-password соответственно. Вам необходимо создать страницы под них и использовать компонент Форма.
Также вы можете добавить свою кастомную разметку через настройку с кодом LoginCustomMakeup (она будет добавлена перед кнопкой Войти).

Если передан URL параметр returnurl на страницу, то при успешном входе будет перенаправление на эту страницу (изначально работа страниц noaccess и
главной при отстуствии доступа перенаправляют на эту страницу с данным параметром)

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

На странице входа можно реализовать возможность входа и регистрации через социальные сети. Для этого используйте сервис 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

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

  • Enabled. Если Enabled=1, то доступна возможность регистрации через социальные сети.
  • RegRole - указывает, какая роль будет добавлена новым пользователям, зарегистрированным через социальные сети.
  • UsernameFormat - определяет как будет формироваться имя пользователя на основе данных из социальной сети. Можно использовать 2 переменных {email} и {uid}.

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

Данная процедура вызывается после создания системного пользователя и назначения ему роли 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 автоматически логируются записи по следующим событиям:
  • exception - если возникла ошибка, при этом указывается где и какая ошибка
  • pv - просмотр страницы, указывается ссылка на страницу
  • sf - сохранение формы, указывается какая форма была сохранена
Таким образом можно увидеть когда (поле created) какое (поле code) где именно и какого рода (поля header и text) событие возникло у пользователя (поле username)
Примечание:
Вы и сами можете вставлять записи в as_trace с собственным кодом, чтобы отслеживать некие события.
Например, при регистрации нового пользователя можно добавлять в as_trace запись с кодом reg, в header указывать роль с которой был зарегистрирован пользователь,

а в text логин и пароль зарегистрировавшегося пользователя.