1.2. Типове и нива позволения в BEST
Присъщи (стандартни) позволения --> дефинирани са във lib/db/access.php
Пример: best/legacy:guest; best/legacy:student ; best/legacy:teacher ... ... ...
Позволения на ниво потребител --> best/user:readuserposts - може да чете публикуваното от потребителите на страниците на личните им профили; best/user:readuserblogs - може да чете блоговете на потребителите ; best/user:viewuseractivitiesreport- може да чете отчетите за активността на потребителите намираща се на страницата на личните им профили
Позволения на ниво модул --> добавянето на този контекст на позволенията наложи в базата данни на Moodle да бъдат направени промени описани по-долу. Сега инсталирането, деинсталирането и обновяването на модул. Сега при всяка промяна на позволенията в рамките на модул води до промяна и в неговата версия. Всеки път когато се извършва промяна в позволенията за даден модул, то това води и до промяна на неговата версия. За разлика от Moodle стремежът ни е бил към въвеждане на единна конвенция за имената на позволенията глобално при цялата система и на всички нива. При Moodle имената на позволенията са специфични за всеки един модул. Позволенията на ниво модул са дефинирани във файла mod/mod_name/db/access.php и носят обикновенно имена от типа: 'mod/mod_name:capability' Например: За модула задание - mod/assignment:view - позволено е четенето на описанието на заданието; За модула Изпит е mod/exercise:assess ; за модула Тест е mod/quiz:manage - позволено е добавянето и изтриването на тестови задаче и т.н.
В директорията db на всеки един модул е добавен файла access.php в който бяха дефинирани всички позволения. В приложения архив например се намира mod/forum/db/access.php
В този файл се намира масив съдържащ записи от типа:
'mod/forum:viewforum' => array(
'captype' => 'read',
'contextlevel' => CONTEXT_MODULE,
'legacy' => array(
'guest' => CAP_PREVENT,
'student' => CAP_ALLOW,
'teacher' => CAP_ALLOW,
'editingteacher' => CAP_ALLOW,
'coursecreator' => CAP_ALLOW,
'admin' => CAP_ALLOW
)
),
Посредством функцията get_context_instance() на всяка една страница, лесно се открива в какъв контекст работи потребителя. Например за споменатия файл това е:
$context = get_context_instance(CONTEXT_MODULE, $cm->id);
С други думи навсякъде където искаме да проверим дали потребителя има правата да извършва дадената дейност извикваме по следния начин has_capability() :
if (!has_capability('mod/forum:viewforum', $context))
{
print_error('nopermissiontoviewforum');
}Ако искате да се генерира съобщение като посоченото в кода по-горе при заявяване на позволение , т.е. да проведете тест, то тогава използвате require_capability() по следния начин:
require_capability('mod/forum:viewforum', $context);
Разбира се могат да се използват и още допълнителни параметри за генериране на широк диапазон съобщения.