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

Смотреть видео

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

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

Управление ролями осуществляется в меню Пользователи / Роли (/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>

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

  • По периоду (по умолчанию 30 сек) будет опрашиваться страница и обновлять эти элементы, если они присутствуют (т.е. вставляться значок с text-success или text-danger). Т.е. данная разметка принимает вид только значка без дополнительных элементов. Период можно изменить через настройку online.period в as.systemOptions.js 
  • Если необходимо принудительно вызвать запуск обновления статусов, то используйте JS функцию as.online.reInit(); (но с подгрузкой скрипта as.online.js)
  • Если поставить настройку online.disableCheck=true в as.systemoptions.js, то показ статуса будет отключен. 
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;
}

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

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


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

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

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

Вы можете сделать кастомную разметку тела страницы /accountLogin через Lang метку в /langs / langValues с кодом LoginMakeup, partCode=login, в которой есть параметр {loginForm}.  После изменения метки, не забудьте сбрасывать общий кеш.

Установка SEO метатегов по странице /account/login делается через языковые метки (на /langs с part=login): LoginTitle, LoginDescription, LoginKeywords, LoginRobots.

Пример: 

<div style="width: 500px; margin: 0 auto;">
  <h1><i class="fas fa-sign-in-alt mr-1"></i> Sign in</h1>
  <hr>
  {loginForm}
</div>

Также вы можете установить 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 1 Msg, Result, RediectUrl
 select 1 Result, '' Msg, '' RedirectUrl

  -- SELECT 2 Outer commands
  select '' type
END

Коллбек на неверный вход - процедура falcon_afterFailLogin

На входе:

  • @username - какой username ввел пользователь. 
  • @parameters - доп параметры в Key, Value2 (msg, password)

На выходе

  • SELECT 1 Msg, Result (если Msg непустой, то оно будет использовано для вывода пользователю).
  • SELECT 2 Внешние действия. 

Пример процедуры: 

CREATE OR ALTER  PROCEDURE [dbo].falcon_afterFailLogin
	@parameters ExtendedDictionaryParameter READONLY,  -- userGuid, langID
	@username nvarchar(32)
AS
BEGIN
	declare @msg  nvarchar(max) = (select value2 from @parameters where [key]='msg')
  	declare @pass  nvarchar(max) = (select value2 from @parameters where [key]='password')
  exec as_print @str='falcon_afterFAILLogin'
 	exec as_print @str=@msg
    exec as_print @str=@pass
    

  -- SELECT 1 Msg, Result, RediectUrl
 select 1 Result, '' Msg, '' RedirectUrl

  -- SELECT 2 Outer commands
  select '' type
END

Дополнительные проверки пользователя при входе

Данную процедуру можно использовать для дополнительных проверок входа пользователя. Если в SELECT 1 вернуть Result=0, то пользователь не войдет под своим аккаунтом, при этом будет выведено сообщение Msg. Если задан RedirectUrl, то после успешного входа пользователь будет перенаправлен на данный URL. 

 

Есть возможность полностью заблокировать страницу /account/login (например, используя другие формы кастом формы входа). Для этого создайте в /settings  настройку DisableAccountLoginPage = 1 

 

Куда перенаправляется пользователь после входа?

При успешном входе применяются следующие правила (в порядке приоритета): 

1. Если есть процедура falcon_afterLogin с непустым RedirectUrl в SELECT 1, то пользователь переходит по указанному адресу после успешного входа 

2. Если есть у ролей пользователя страницы с галочкой Панель управления и В меню, то выбирается первая из них (минимальное значение Порядок в меню) для перехода после входа.

3. Переход на главную страницу. 

 

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

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

Для этого используется процедура falcon_normalizeLogin. Она выполняется ДО проверки доступа по логину и паролю. На входе username, введенный пользователь. На выходе будет username, который будет проверяться системой для входа.

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

CREATE PROCEDURE [dbo].falcon_normalizeLogin @login nvarchar(128)
AS BEGIN
    select lower(@login)
END
 Процедура на вход получает @login и возвращает 1 строковое значение в SELECT.
 
К примеру это можно использовать так: пользователь вводит email или телефон. Вы по нему находите в процедуре реальный username и его выдаете на проверку.

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

На странице входа можно реализовать возможность входа и регистрации через социальные сети. Для этого используйте сервис 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). 
 
На странице /diag есть возможность отслеживать динамику по кодам trace.
 
Примечание: Вы и сами можете вставлять записи в as_trace с собственным кодом, чтобы отслеживать некие события.
Например, при регистрации нового пользователя можно добавлять в as_trace запись с кодом reg, в header указывать роль с которой был зарегистрирован пользователь,

а в text логин и пароль зарегистрировавшегося пользователя.
Falcon Space - функциональная веб-платформа разработки на узком стеке MS SQL/Bootstrap. Вводная по Falcon Space
Насколько полезной была статья?

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

Выгода от использования Falcon Space

В 2-3 раза экономнее и быстрее, чем заказная разработка
Более гибкая, чем коробочные решения и облачные сервисы
Используйте готовые решения и изменяйте под свои потребности
Нужна бесплатная консультация?
Планируете делать веб-проект?
Сайт использует Cookie. Правила конфиденциальности OK