Информация о роли в собственном php файле

Re: Информация о роли в собственном php файле

от Vadim Dvorovenko -
Количество ответов: 0
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода

У меня была похожая задача. Решал подобным вашему способу, проверял, назначены ли хоть где-то пользователю те или иные права. Только не ориентируйтись на роли (role), список ролей может меняться. Ориентируйтесь на права (capability).

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

private static function has_capability_in_any_context($capability) {global $DB, $USER; static $capabilities = array();
if (isset($capabilities[$capability])) {
return $capabilities[$capability];
}
$sql = "
SELECT
1
FROM
{role}
INNER JOIN {role_assignments} ON {role_assignments}.roleid = {role}.id
INNER JOIN {role_capabilities} ON {role_capabilities}.roleid = {role}.id
WHERE
{role_assignments}.userid = :user AND
{role_capabilities}.capability = :capability AND
{role_capabilities}.permission = '1'";
return $capabilities[$capability] =
$DB->record_exists_sql($sql, array('user' => $USER->id, 'capability' => $capability));
}

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

Но такой подход всё-таки не совсем правильный, поскольку в мудле изначально заложено равноправи всех пользователей и различие прав в разных контекстах. Если ваш пользователи принципиально разделены, например студенты/преподаватели, то самый правильный, на мой взгляд, способ был бы добавить пользователям дополнительное поле в профиль, запретить пользоватеям его редактировать, и делать выводы о принадлежности к той или иной группе на основании именно этого поля. Как вариант создать глобальные группу в контексте сайта, указать группам idnumber, и анализировать по ним. Или создать скрытые курсы, куда записывать этих пользователей, курсы тоже искать по idnumber.