Добавени таблици
2.1. 'role'
Поле Описание Тип id уникален идентификато int name кратко име на ролята varchar fullname цялото име на ролята text description Описание на ролятата text timemodified времева щампа int sortorder int courseid id от таблицата course int userid id от таблицата user- последно променяне на ролята int Бележки:
- Ролите се създават на база курс. Всички роли с идентификатор courseid=1 (курс) ще са достъпни за всички курсове
- Езиковите стрингове, ще останат само за 6 -те назначавани роли. За езиковата поддръжка другите роли могат да използват само синтаксиса на HTML тагът
<lang> в полето
'fullname'
<lang lang="en">en</lang><lang lang="de">de</lang><lang lang="ma">ma</lang>
- Списъка с участниците в курса ще бъде подреден от sortorder. Важно е да се отбележи, че ролите на ниво сайт ще бъдат изредени в списъка преди ролите на ниво курс.
За ролите на ниво сайт е препоръчително да се използват стойности в интервала 1 - 1000, докато за ролите на ниво курс: 1000+
2.2. role_capabilities
Поле Описание Тип id запис с идентификатора на потребителя int module име на модула varchar capability име на позволението varchar Бележки:
- Тази таблица взаимодейства с кода на модулите на уч. дейности
- За използването на модулите са добавени следните API функции.
add_capability ( $module, $capability )
remove_capability ( $module, $capability )Добавените функции 'role_capabilities' и 'role_allocations' ще променят таблиците
- Във файловете за езикова поддръжка са внесени имената на различните видове позволения. След тестване на BEST беше достигнато до извода, че най-подходящият формат е: prefix capability name в language string с 'апострофи'
2.3. role_allocations
Поле Описание Тип id идентификатор на записа int roleid id от таблицата role int capabilitiesid id от таблицата role_capabilities int Бележка:
- Това не е flag таблица. Записите тук са само за позволенията които са налични за дадена роля.
2.4. role_users
Поле Описание Тип id идентификатор на записа int userid id от таблицата user int courseid id от таблицана courses int roleid id от таблицата role int timestart времева щампа int timeend времева щампа int timemodified времева щампа int assignerid id от таблицата user - в смисъл кой притежава ролята int Бележки:
- Както вече беше споменато един потребител може да е притежател на различни роли на ниво сайт и на ниво курс.
- Тази таблица се попълва от софтуерните добавки за автоматично пакетно записване от импортиран файл или при ръчно записване от потребители които имат позволение да назначават роли 'assign roles'.
Оптимизации и корекции в таблиците на базата данни направени във връзка с имплементацията
- course
Наличието на потребители които сами се записват наложи въвеждането на ново поле 'default_role'.
Премахнати таблици след оптимизацията
- user_coursecreators
- user_students
- user_teachers
Нови функции в BEST въведени след имплементацията
- require_capability ( $module, $capability, $courseid )
function require_capability ( $module, $capability, $courseid) { global $USER; return ( isset ($USER->capabilities["{$module}_{$capability}"][$courseid]) or isadmin () ); }Функция на ядрото на новата система
Ако бъдат поискани позволения които не съществуват се връща логическа стойност false. Този сценарии е предотвратен тъй като кода поддържа и двете: таблицата 'role_capabilities' както и извикванията на require_capability.
- user_possesses_role_capabilities ( $role, $courseid )
връща логическа стойност true само когато потребителя притежава всички позволения типични за дадената роля, а също така се връща логическа стойност false във всички останали случаи
В процеса на работа се наложиха корекции във функциите
- isteacher ( $courseid, $userid, $includeadmin )
- isstudent ( $courseid, $userid )
- isguest ( $userid )
Възражения имам към функциите
- isteacheredit ( $courseid, $userid )
- iscreator ($userid )
Други промени
- course/loginas.php
Позволенията заложени в глобалната за BEST променлива $USER следва да бъдат свързани с логическия оператор 'AND' с реалния потребител и с псевдо-потребителя. Това беше направено с цел да се избегне придобиването на допълнителни позволения от реалния потребител при ограничаване на позволенията на псевдо потребители.