Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Saitistika 4.0.Руководство разработчика.2005

.pdf
Скачиваний:
11
Добавлен:
23.08.2013
Размер:
3.22 Mб
Скачать

 

Рисунок 14. Диаграмма таблиц базы данных подсистемы «Управление шаблонами»

Описания таблиц

 

 

Themes – темы

 

 

Поля

 

Описание

ID

 

Идентификатор.

Parent

 

ID родительской темы.

Name

 

Название

Label

 

Мнемоника

Description

 

Описание

Changed

 

Дата последнего изменения темы

SeqNo

 

Порядковый номер вывода на бэкофисе

LastGen

 

Дата последней генерации темы

LastGenPreview

 

Дата последней генерации темы на Preview-сайт

ThemeFiles – шаблоны темы

Поля

 

Описание

ID

 

Идентификатор.

Theme

 

ID родительской темы.

Name

 

Название

Text

 

Содержимое

Changed

 

Дата последнего изменения файла

ChangeAuthor

 

Автор последнего изменения файла

ThemeEditors – таблица редакторов темы

Поля

 

Описание

Theme

 

ID темы.

Man

 

ID пользователя, редактировавшего тему

Хранимые процедуры

Простые. Описание не требуется.

Примеры использования

Генерация темы на бэкофисе

<%

Dim Files, i, WriteFile, DirPath, FilePath, FileList, AllGenerated FileList = "" : GenerateTheme = ""

SQLO.RSOpen "ListTheme_FilesText (" & ThemeID & ")" If Not SQLO.RS.Eof() Then

Files = SQLO.RS.getRows() SQLO.RSClose

Copyright © 2005 Individ company

Страница

Контакты: www.saitistika.ru | support@saitistika.ru | (0852) 321464

71 из 71

 

 

For i=0 to uBound(Files,2)

If (Not OnlyNew) OR ((Not preview) And (Files(thThemeListCol_Changed, i) = 1)) OR ((preview) And (Files(thThemeListCol_ChangedPreview, i) = 1)) Then

DirPath = Server.MapPath (Path)

If CreatePath(fso, DirPath) Then

FilePath = DirPath & "\" & Files(thThemeListCol_Name, i) Set WriteFile = Nothing

On Error Resume Next

Set WriteFile = fso.OpenTextFile(FilePath, 2, true, 0) On Error Goto 0

If Not (WriteFile Is Nothing) And IsObject(WriteFile) Then WriteFile.Write Files(thThemeListCol_Text, i):WriteFile.Close

Else

GenerateTheme = GenerateTheme & "Ошибка при доступе к файлу """ & RI.TXTA(Path & Files(thThemeListCol_Name, i)) & """<br/>"

End If

FileList = FileList & fso.GetFileName( FilePath ) & "," Else

GenerateTheme = GenerateTheme & "Ошибка при создании раздела """ & RI.TXTA(Path) & """<br/>"

End If

End If

Next

If Len( FileList ) > 0 Then FileList = Left( FileList, Len( FileList ) - 1 )

AddEvent "TG", ThemeID, "DT", RI.UsrID, 0, AddThemeGenParams( _

Path, DirPath, OnlyNew, Preview, FileList ), MakeObjectStaticString( _ RI.UsrID, ThemeID, "DT", 0, 0 ), 0, ".DS.TE."

End If

if preview Then

SQLO.Execute ("SetTheme_GenTime ("&ThemeID&", 1)")

Else

SQLO.Execute ("SetTheme_GenTime ("&ThemeID&", 0)")

End If SQLO.RSClose

%>

Copyright © 2005 Individ company

Страница

Контакты: www.saitistika.ru | support@saitistika.ru | (0852) 321464

72 из 72

 

 

Подсистема управления пользователями

Логика работы

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

Пользователи

Таблица People хранит основные данные о пользователе. Некоторая информация хранится в таблице Clients, однако работать с ней нужно работать только для совместимости со старыми функциональностями, обеспечивая наличие соответствующей

записи в этой таблице

1.При добавлении/удалении пользователя

2.При изменении тех данных пользователя, которые хранятся в этой таблице.

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

People.

Administrator – особый пользователь, включенный в группу «Администраторы» и роль «Администратор». При штатной работе имеет полные права в системе.

В логинах и паролях разрешены к использованию (и есть соответствующие проверки при создании и изменении) только латинские буквы и цифры. Это связано это со специальной обработкой передаваемых (и хранимых в куках) идентификационных данных на MAE-страницах.

Группы пользователей

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

Название

Описание

Все

Все зарегистрированные и незарегистрированные пользователи

Анонимы

Все незарегистрированные пользователи фронтофиса

Пользователи фронтофиса

Все зарегестрированные пользователи фронтофиса

Администраторы

Имеет полные объектные права на все сущности системы и входит во все системные роли

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

Роли

Роли определяют права пользователей и Групп пользователей на некоторые действия. Например добавлять и редактировать материалы могут только пользователи, исполняющие роль «Автор». Даже если у некоторого пользователя есть объектное право редактирования материала, без роли «Автор» он не сможет редактировать этот материал. Действия практически над всеми сущностями бэкофиса защищены Ролями.

 

Название

Предназначение

 

 

Все

Включены все пользователи

 

 

Программист

Доступ в раздел работы с шаблонами и «программными» полями

 

 

Менеджер статистики

Доступ в раздел статистики

 

 

Менеджер пользователей

Доступ на страницы управления Пользователями, Группами пользователей, Ролями

 

Менеджер Workflow

Доступ на страницы конфигуирования Workflow

 

 

Менеджер проектов

Доступ на страницы добавления проектов, собственники проектов, полное управление

 

 

проектами

 

 

Участник проектов

Доступ на страницы существующих проектов, работа с проектами

 

 

Менеджер регистрации

Доступ на страницу конфигурирования формы регистрации

 

 

Менеджер безопасности

Отвечает за работу со страницей общих настроек системы, полями фильтров безопасности

 

Менеджер структуры

Добавление разделов, менеджмент типов разделов

 

 

Менеджер интерактивов

Доступ на все страницы раздела «Интерактивы»

 

 

Менеджер магазинов

Доступ к страницам управления Магазинами и рубрикатором товаров

 

 

Автор

Доступ к страницам материалов

 

 

Рекламист

Доступ к страницам баннерной системы

 

 

 

 

 

 

 

Copyright © 2005 Individ company

Страница

 

 

Контакты: www.saitistika.ru | support@saitistika.ru | (0852) 321464

73 из 73

Менеджер типов данных

Доступ к страницам «Типы данных»

Администратор

Роль, включающая в себя все роли. Полный доступ в систему.

База данных

Диаграмма таблиц

 

 

Рисунок 15. Диаграма таблиц базы данных подсистемы «Управление пользователями»

 

 

Описания таблиц

 

 

 

 

People

 

 

 

 

Поле

 

Описание

 

 

ID

 

Идентификатор пользователя.

 

 

ClientID

 

Идентификатор соответствующей записи в таблице [Clients]

 

 

FName

 

Имя пользователя

 

 

IName

 

Отчество или инициалы

 

 

LName

 

Фамилия пользователя

 

 

Login

 

Логин входа в систему

 

 

Passwd

 

Пароль

 

 

Title

 

Имя и Фамилия пользователя

 

 

Enabled

 

Флаг разрешения входа в систему

 

 

EMail

 

Email пользователя, указанный при регистрации

 

 

 

 

 

 

 

 

 

Copyright © 2005 Individ company

Страница

 

 

 

Контакты: www.saitistika.ru | support@saitistika.ru | (0852) 321464

74 из 74

 

Note

 

Комментарий. В проекте «Дивнет» использовался для управления конкурсом красоты

 

Picture

 

Идентификатор картинки, из таблицы [Images] – фотографии пользователя

 

 

WindowHeight

 

Высота окна визуального редактора из персональных настроек пользователя

 

 

PublishInfo

 

Флаг публиковать/непубликовать информацию о пользователе на сайте. Используется в

 

 

 

«Авторах»

 

 

UseSlowConnect

 

Флаг «медленное соединение» из персональных настроек пользователя. Вроде не

 

 

 

используется

 

 

ShowTips

 

Флаг «показывать подсказки» из персональных настроек пользователя. Используется в БО.

 

ShopDefault

 

Магазин по-умолчанию. Используется в «Магазине»

 

 

ShowBlocks

 

Флаг «загружать блоки раскрытыми» из персональных настроек пользователя. Используется

 

 

 

в БО.

 

 

...

 

 

 

 

Intranet

 

Признак того, что это Intranet-пользователь (используется, например, при очистке лога)

 

...

 

 

 

 

Clients – таблица клиентов

 

 

 

Поле

 

Описание

 

 

ID

 

Идентификатор пользователя.

 

 

Login

 

Логин

 

 

Password

 

Пароль

 

 

RegDate

 

Дата регистрации

 

 

EMail

 

Email

 

 

Note

 

Комментарий.

 

 

Groups – группы пользователей

 

 

 

Поле

 

Описание

 

 

ID

 

Идентификатор группы.

 

 

Label

 

Название группы

 

 

system

 

Системное имя группы, если поле пустое, то группа не является системной.

 

 

SeqNo

 

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

 

 

Type

 

 

 

 

Intranet

 

 

 

 

CreationDate

 

Дата регистрации

 

 

GroupPeople – таблица групп пользователей

 

 

Поле

 

Описание

 

 

Grp

 

Идентификатор группы.

 

 

Man

 

Идентификатор пользователя.

 

 

Roles – роли пользователей

 

 

 

Поле

 

Описание

 

 

ID

 

Идентификатор роли

 

 

Name

 

Название роли

 

 

Description

 

Описание роли

 

 

Deleted

 

Флаг удаленности роли

 

 

SystemName

 

Системное имя роли, если поле пустое то роль не является системной

 

 

TaskTracking

 

Флаг означающий, могут ли участники этой роли ставить Задания на контроль (не

 

 

 

реализовано)

 

 

RolesUsersGroups связи между пользователями и группами пользователей

 

 

Поле

 

Описание

 

 

RoleID

 

Идентификатор роли

 

 

RoleType

 

Тип связи («RU» – связь «Role – User», «RG» – связь «Role – Group»)

 

 

UserGroupID

 

Идентификатор пользователя или группы.

 

 

Хранимые процедуры

 

 

 

AddUserToGroup

 

 

 

DeleteGroup

 

 

 

DeleteUser

 

 

 

GetGroup_Label

 

 

 

ListGroups_ID_Label_AmountOfPeople

 

 

ListGroups_ID_Label_UserCheck

 

 

 

 

 

 

 

 

 

Copyright © 2005 Individ company

Страница

 

 

 

Контакты: www.saitistika.ru | support@saitistika.ru | (0852) 321464

75 из 75

ListPeople_ID_Login_Title_Groupcheck

NewGroup

Roles_AddRole

Roles_Assign_Group

Roles_Assign_ObjectType

Roles_Assign_User

Roles_ListGroupRoles

Roles_ListRoles

Roles_ListUserRoles

Roles_RoleProperties

Roles_RoleProperties_Set

Users_Add2Clients

Users_Add2People

Users_CheckLogin

Users_GetUserInfo

Users_SetGroupSettings

Users_SetUserInfo

Users_SetUserLogonDates

Users_UsersList

SetUserSetting

GetUserSetting

GetRegField_Value

Функции

Users-functions.asp

Примеры использования

Вывод всех пользователей определенной роли

SELECT DISTINCT P.[ID], P.Title FROM Roles R

LEFT JOIN RolesUsersGroups RUG ON RUG.RoleID=R.[ID]

LEFT JOIN Groups G ON G.[ID]=RUG.UserGroupID and RUG.RoleType = 'RG' LEFT JOIN GroupPeople GP ON GP.Grp=G.[ID]

LEFT JOIN People P ON P.[ID] = GP.Man or (P.[ID] = RUG.UserGroupID and RUG.RoleType = 'RU')

WHERE R.SystemName = @Role

Проверка ролей текущего пользователя на ASP-страницах бэкофиса

If not RI.CheckRoles("RoleSystemName") Then RI.AccessDenied:RI.Show:Response.End

или

If not RI.CheckRoles(Array("RoleSystemName1"," RoleSystemName2",...)) Then RI.AccessDenied:RI.Show:Response.End

Проверка ролей пользователя в хранимой процедуре

EXECUTE @Can = Roles_CheckRole @UserID, 'RoleSystemName'

или

EXECUTE @Can = Roles_CheckRoles @UserID,'RoleSystemName1', 'RoleSystemName2', ...

Copyright © 2005 Individ company

Страница

Контакты: www.saitistika.ru | support@saitistika.ru | (0852) 321464

76 из 76

 

 

Подсистема регистрации и авторизации

Логика работы

Общие принципы авторизации

1.Авторизация работает по кукам.

2.На каждый сайт ставится две куки: одна с логином и одна с паролем.

3.Установка кук производится в зависимости от настроек пользователя (от его уровня безопасности)

3.1.Каждая кука может ставиться, как «навсегда», так и на сессию

3.2.Действуют запреты на авторизацию по IP-адресу и Windows-пользователю, определяемые настройками

пользователя и свойствами системы и сайтов

4.Кроме того, возможны специальные случаи автоматической авторизации по Windows-пользователю (при соответствующих настройках пользователя).

Особенности авторизации на фронтофисе

1.Имена кук для фронтофисных сайтов различны для каждого сайта

2.При авторизации, кроме установки кук на сайт, производится еще редирект на специальную страницу бэкофиса с обратным возвратом. На этой странице производится авторизация (установка кук) на бэкофисном сайте для обеспечения работы Direct Edit.

3.Для аутентификации пользователя, получения информации о нем, а также для его авторизации служит класс CUserInfo. Один объект этого класса с именем Если пользователь авторизован, то UserInfo.UserID > 0

4.Если авторизованность необязательна, то можно узнать логин и емейл с которыми он последний раз авторизовывался с помощью свойств UserInfo.LastLogin и UserInfo.LastEMail.

5.Некоторые функции авторизации выполняет подсистема журналирования. UserSession.UserID возвращает идентификатор текущего узнанного пользователя. Если текущий пользователь авторизован или является анонимом, то

UserSession.UserID = UserInfo.UserID. Если текущий пользователь узнан, то UserInfo.UserID = 0, а

UserSession.UserID = [идентификатор пользователя]. UserInfo.GuestClient содержит идентификатор текущего гостя или 0, если текущий пользователь является узнанным или авторизованным. Для выяснения, является ли текущий пользователь гостем, также служит свойство UserSession.IsGuest. Для переписывания событий при регистрации гостя или синхронизации идентификатора гостя используются хранимые процедуры Sait_Events_ChangeGuestToUser и Sait_Events_ChangeGuestToGuest

6.Функция регистрации частично выполняется модулем «Списки рассылки». При регистрации нового пользователя добавляется запись для него в таблицу People и устанавливается связь этой записи с таблицей Clients. Класс фронтофиса CMailList предоставляет идентификатор записи в таблице Clients, соответствующей текущей логике и введенным на странице регистрации параметрам пользователя, создавая запись в таблице Clients по необходимости. При этом производится обработка подписки этого клиента на указанные на странице регистрации списки рассылки.

Авторизация Windows-пользователя

При работе с пользователем через объект UserInfo вся работа с Windows-пользователями производится автоматически. Т.е. вызов UserInfo.Authenticate() гарантирует что пользователь авторизован/неавторизован правильно, в соответствии с его настройками уровня безопасности и Windows-авторизации. Вся работа обеспечивается функцией AuthGetNTUser(). Она возвращает текущего Windows-пользователя. При авторизации Windows-пользователя используется внешний компонент интеграции с Active Directory.

Copyright © 2005 Individ company

Страница

Контакты: www.saitistika.ru | support@saitistika.ru | (0852) 321464

77 из 77

 

 

Рисунок 16. Схема автоматической регистрации и узнавания анонимных пользователей. Порядок перехода анонимов в

зарегистрированных пользователей

Работа с Cookies

Запрещается напрямую использовать куки для получения или хранения информации о пользователе, проверки авторизованности и т.п. Иными словами, не должно быть обращений к коллекциям Request.Cookies и Response.Cookies. Имена кук различны для каждого сайта, время их жизни тоже зависит от ряда параметров, все это может со временем изменяться, поэтому все работа должна производится через объект UserInfo. Так, для получения свойств, авторизации/аутентификации служат стандартные свойства и методы объекта, а для хранения произвольной информации

(например о корзине в магазине) служат свойства SiteStateInfo (чтение) и SiteSessionInfo/SiteLongLifeInfo (запись).

Copyright © 2005 Individ company

Страница

Контакты: www.saitistika.ru | support@saitistika.ru | (0852) 321464

78 из 78

 

 

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

Cookie, выставляемые при регистрации, называются по-разному для разных сайтов, и может изменятся. Кроме того, авторизованность зависит от установленных запретов IP-адреса и Windows-пользователя, а также от установки автоматической авторизации по Windows-пользователю. Поэтому пользоваться куками для проверки авторизованности нельзя, для этого служит объект UserInfo.

Форма авторизации на ФО

Чтобы сделать работающую форму авторизации на любой странице, нужно сделать форму, пользуясь следующими правилами:

1.Поле для логина должно называться login и по умолчанию равняться UserInfo.LastLogin

2.Поле для пароля должно называться password и быть по умолчанию пустым

3.Должно быть спрятанное поле backpage, в котором должен содержаться URL страницы, на которую переходить в случае

успеха

4.Кнопка отправки должна иметь имя Authorize

5.Форма должна иметь action, равный RI.URLAuthPage

Хранимые процедуры

Auth_CheckIP Auth_CheckNTUser Auth_ListWinLogons Users_Add2People Sait_Events_ChangeGuestToGuest Sait_Events_ChangeGuestToUser Sait_Events_GuestExists Sait_Events_NewGuestClient

Классы

Список классов

CLogonState

XSL-шаблоны

Имя файла

Описание

register-form.xsl

Вывод основных полей формы регистрации на фронтофисе

Примеры использования

Завершение работы с системой

If QSS("Logout") = "on" Then UserInfo.Logoff

Response.Redirect GetBackPage("\") End If

Ссылка на регистрацию с возвратом на эту же страницу:

<a href="<%=Configuration.URLRegisterPage & "&BackPage=" & Server.URLEncode(Request.ServerVariables("SCRIPT_NAME") & "?" & Request.ServerVariables("QUERY_STRING"))%>">Ссылка на регистрацию</a>

Copyright © 2005 Individ company

Страница

Контакты: www.saitistika.ru | support@saitistika.ru | (0852) 321464

79 из 79

 

 

Подсистема персонализации

Логика работы

Персональными настройками пользователя считаются те данные системы, которые напрямую привязаны к пользователю. Связи пользователя с группами пользователей и с ролями не считаются настройками.

Основные настройки пользователя, такие как имя, логин, способ авторизации хранятся в таблице пользователей people. Таблица клиентов clients дублирует часть настроек из people.

В версии 4.0 появился новый механизм хранения фронтофисных пользовательских настроек, основанный на таблице

ClientsSettings.

Работа с данными

Бэкофис механизм хранения пользовательских настроек страниц бэкофиса через таблицу UserSettings. Хранимые в ней настройки не должны содержать большой, или критически важной информации. Обычно там хранятся настройки раскрытости блоков, уровень вложенности просмотра разделов, введенный последний раз пользователем, и т.д. Хранить персональные настройки в cookies не принято. Начальная станица бэкофиса все-таки хранит в cookies настройки блоков, но только для передачи их от клиента серверу.

Фронтофис В зависимости от критичности (важности) пользовательские настройки хранятся либо

1.в Session (например «одноразовые» настройки отображения страницы)

2.в Cookies (например список голосований, на которые ответил пользователь)

3.в базе (например пользовательский CSS)

При создании собственной настройки необходимо точно определиться с временем жизни настройки, ее важностью и размерами информации, хранящейся в ней. Уже на основе этих данных можно определить каким из механизмов для ее создания/хранения пользоваться.

База данных

Описания таблиц

ClientSettings – Настройки клиента

 

Поля

Описание

 

 

ID

Идентификатор настройки

 

 

ClientID

Идентификатор клиента, кому принадлежит данная настройка

 

 

Key

Строковой ключ, идентифицирующий конкретную настройку у заданного клиента

 

Expired

Время жизни настройки (по умолчанию один год)

 

 

Int

Список настроек, определяемый программистом. В конкретной настройке может

 

Float

использоваться поднабор полей.

 

 

String

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

 

String2

использующем настройки.

 

 

String3

 

 

 

Text

 

 

 

UserSettings – настройки пользователя

 

 

Поля

Описание

 

 

UserID

Идентификатор пользователя из таблицы People.

 

 

Page

Имя скрипта, который использует данную настройку

 

 

name

Название самой настройки, например “AddNews.Add.Author”

 

 

val

Значение настройки

 

 

MySaitistikaSettings - Настройки пользователей для начальной станицы бэкофиса

 

 

Поля

Описание

 

 

UserID

Идентификатор пользователя из таблицы People.

 

 

BlockID

Идентификатор блока, для которого предназначена текущая настройка( из таблицы

 

 

MySaitistikaBlocks )

 

 

Days

Настройка пользователя «Срок в днях»

 

 

 

 

 

 

 

Copyright © 2005 Individ company

Страница

 

 

Контакты: www.saitistika.ru | support@saitistika.ru | (0852) 321464

80 из 80