Диссертация (1090660), страница 14
Текст из файла (страница 14)
Любой пользователь может состоять в неограниченномчисле групп. Группы предназначены для определения уровня доступа того или иногопользователя. Для реализации подобного функционала внутри авторизационного набора необходимо объявить другой специализированный набор — набор групп. Данный набор использует зарезервированное имя _groups.
Для того, чтобы реализоватьвозможность добавлять множество пользователей во множество групп, необходимоустановить для набора групп связь «многие ко многим» с родительским (здесь —всегда авторизационным) набором (атрибут relation="multi").Название группы представляет собой последовательность символов латиницы ицифр.
Название группы определяется зарезервированным именем _groupname блока строкового типа. Группы создаются и удаляются администратором системы. Всегруппы имеют собственный приоритет, выраженный в числовой форме. Приоритетуказывается в блоке типа number с зарезервированным именем _priority. Права до-84ступа у пользователя, являющегося членом нескольких групп, определяются группойс наивысшим приоритетом. Групп с одинаковым приоритетом существовать не может.Пользователь, как правило, состоит в группах, созданных вручную администратором системы. Им же и производится присвоение пользователю определённых групп.Однако помимо стандартных групп, созданных администратором, существуют группы, присваиваемые пользователям в зависимости от тех или иных обстоятельств,внешних факторов. Эти группы получили название событийных.
Такие группы создаются автоматически при объявлении набора групп, их удалить нельзя, однако допустимо менять приоритет.Кроме того, системой автоматически создаётся и ряд стандартных групп, рекомендуемый к использованию для разграничения прав доступа. Эти группы ничем неотличаются от тех, которые могут быть созданы администратором вручную: администратор точно также может менять их приоритет, название, а также удалять. В таблице2.10 представлен перечень всех групп, создаваемый при объявлении соответствующего набора, их начальные приоритеты и права доступа (об этом будет упомянуто вследующих разделах).
Событийные группы выделены курсивом.2.6.3Разработка функционала прав доступа на блоки и экземпляры набораКлючевую роль в методике BlockSet играют права доступа, устанавливаемые наэкземпляры набора. Для работы с правами доступа спецификацией предусматривается специальный блок типа «permissions», позволяющий устанавливать права доступакак в контексте набора, так и в контексте одного или нескольких блоков этого набора.Главный атрибут блока подобного типа — scope, устанавливающий область действияправ доступа. Допустимы следующие значения:self (по умолчанию) — права доступа действуют только на тот набор, внутри которого установлен блок прав доступа.
Данное значение допустимо комбинировать сдругими нижеперечисленными значениями, разделяя их запятой.branch — устанавливает права доступа для всех вложенных наборов, но не длясамого себя.child — аналогично branch, но распространяется только на прямых потомков текущего набора.parent — распространяет своё действие на прямого родителя.85adminsupermodmoderbannedownerАдминистраторСупермодераторМодераторЗаблокированВладелецCRUDCRUDCRUD----RU-userПользователь-R--searchПоисковыйробот-R--guestГостьallВсеПриоритетИмя группы Названиев системеПрава доступаТаблица 2.10. Перечень групп, создаваемых при инициализациисоответствующего набора с указанием начальных приориетов и правдоступа1000900800700600ОписаниеСтандартные группы,создаютсяавтоматически.Устанавливает разрешения для владельца(создателя) экземпляранабора.0 Любой авторизованныйпользователь системы.-600 Устанавливается всемпоисковыммашинам,индексирующим ресурс.-R-- -700 Любой неавторизованный пользователь.-R-- -1000 Любой пользователь.86Помимо стандартных значений атрибутов, допустимо задать действие на определённые наборы и блоки.
Для этого необходимо перед названием набора или блокаподставить специальный символ # для набора и : для блока. Например: #someset,:someblock.В языке BML предусмотрен также атрибут without для исключения из-под действия текущих прав доступа определённого набора или блока.Стоит обратить внимание, что группы, установленные в правах доступа, суммируются.
То есть если, к примеру, для одного блока прав доступа установлена группа"user"(авторизованный пользователь), а для другого блока присутствуют права с явно установленной группой "moder"(модератор) и текущий пользователь входит в обегруппы, то при пересечении этих двух прав доступа применится группа с более высоким приоритетом. При этом если стоят индивидуальные права на конкретного пользователя, то они всегда имеют наивысший приоритет.
Наглядно механизм действияправ доступа показан в разделе 4.5.5.2.7Разработка унифицированного метода полученияпользовательских данных с учётом их характерных особенностей2.7.1Алгоритм обработки чтения пользовательских данных идемпотентного запросаКак предписывают стандарты [27, 56], взаимодействие пользователя с серверомпроисходит путём отправки на него данных с помощью HTML-форм.
Так как BlockSetявляется высокоуровневой технологической прослойкой между Web-сервером, именаполей ввода в формах регламентируются определёнными правилами. Для того, чтобыпонять, как получать пользовательские данные, необходимо определить, для какихцелей осуществляется их получение.Если при выборке данных не производится никаких изменений, а входные данныеявляются лишь критериями выборки, целесообразно использовать HTTP-метод GET.Данный метод характеризуется свойством идемпотентности. Это означает, что приповторном обращении к ресурсу указанным методом с теми же самыми входнымиданными, пользователь получит тот же самый результат (разумеется, если данные небудут изменены побочным воздействием).87Для задания путём пользовательского ввода критериев выборки экземпляров тогоили иного набора существует два способа [79].
В первом способе необходимо задатьимена зависимых от пользовательского ввода блоков выбираемого набора в динамических вставках базового адреса локации. Данный способ был описан в разделе 2.3. Втаком случае, выбираемое значение будет частью URL. Второй способ подразумеваетприём данных через строку запроса (англ. Query String). В этом случае необходимов атрибуте condition нужного блока указать значение input, которое будет ссылаться на параметр запроса, переданного на Web-сервер HTTP-методом GET. В качествеимени параметра запроса используется имя набора и имя блока, разделённые точкой. Однако имя набора можно опустить и указывать только имя блока, если в такомнаборе атрибут nameskip имеет значение, отличное от нуля.
Однако в таком случаестоит учитывать, что включение указанного атрибута у нескольких наборов, содержащих одинаковые имена блоков, вызывает неоднозначность и, как следствие, ошибкуинтерпретации.Пример строки URL, заданной таким способом:/search?articles.subject=Biology&articles.year=1995.Здесь статично задана локация search в которой считываются два параметра дляблоков subject и year, устанавливающих критерии выборки из набора articles.В том случае, когда задействованы оба описанных способа получения данных дляодного и того же блока, возникает противоречие, разрешаемое в пользу базового адреса, в то время как соответствующее значение строки запроса будет проигнорировано.2.7.2Алгоритм сохранения пользовательских данных модифицирующего запросаДля передачи параметров, модифицирующих данные на сервере, загрузки файлов,передачи скрытых данных, спецификация протокола HTTP предписывает использование метода POST.
В методики BlockSet методом POST отправляются все данные,связанные с созданием новых и модификацией существующих экземпляров набора,а также с аутентификацией пользователя (частный случай: модификация авторизационного набора). Формат передачи данных аналогичен идемпотентному запросу:при создании экземпляра набора или модификации существующего передаются пары «ключ-значение», где ключ состоит из названия набора и блока, между которымистоит точка (название набора может опускаться, если включена опция nameskip). Основное отличие в том, что все данные передаются в теле запроса.
Второе отличие в88необходимости задействовать служебный атрибут act, в котором необходимо задатьтип действия: create — создание экземпляра набора или update — изменение существующего экземпляра набора. В случае последнего, вместе с изменяемыми даннымитребуется передача соответствующего ключа-идентификатора, роль которого выполняет атрибут id. Значение идентификатора не может быть перезаписано ни при какихусловиях.2.7.3Алгоритм приёма данных при взаимодействии с BMLДля обеспечения обмена данными блокам добавлены следующие атрибуты:– onread – для передачи идемпотентных данных– oncreate, onupdate, ondelete, onauth – для передачи данных модифицирующих запросов создания, обновления и удаления контента, авторизации и выхода соответственноЭти атрибуты могут принимать следующие значения, которые определяют, откудаблок будет принимать данные:– @input – данные, которые должны прийти от клиента– @default – данные берутся из атрибута “default”При этом их допустимо комбинировать со строками.Для переключения режима приёма данных для набора вводится свойство "act".