Saitistika 4.0.Руководство разработчика.2005
.pdf
|
Рисунок 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 пользователя, указанный при регистрации |
|
|
|
|
|
|
|
|
|
|
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 |
|
Дата регистрации |
|
|
|
|
||
|
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 |