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 (она будет добавлена перед кнопкой Войти).

Вы можете назначить класс для поля логина через настройку с кодом LoginInputCssClass.

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

Также вы можете установить SQL коллбек falcon_afterLogin для выполнения некоторых действий после успешного входа пользователя в систему: 

CREATE OR ALTER PROCEDURE [dbo].falcon_afterLogin
	@parameters ExtendedDictionaryParameter READONLY,  -- userGuid, langID
	@username nvarchar(32)
AS
BEGIN
  exec as_print @str='falcon_afterLogin'

  -- SELECT 2 Outer commands
  select '' type
END

Нормализация логина пользователя при входе в систему

В некоторых случаях необходима нормализация логина, приведение к единому виду. Для этого используется процедура falcon_normalizeLogin.
Вы можете ее использовать при регистрации в форме. Если подобная процедура существует, то она будет вызываться и при входе в систему для обработки входящего логина.

CREATE PROCEDURE [dbo].falcon_normalizeLogin @login nvarchar(128)
AS BEGIN
    select lower(@login)
END
 Процедура на вход получает @login и возращает 1 строковое значение в SELECT.

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

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

Платформа Falcon Space

Это снижение стоимости владения

за счет меньшего количества людей для поддержки

Это быстрое внесение изменений

по ходу эксплуатации программы

Это современный интерфейс

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

Бесплатное обучение разработке на Falcon Space

Вы можете разрабатывать самостоятельно или сотрудничать с нами в плане веб-разработки на платформе Falcon Space.
Примечание

Google поиск по нашей документации