Проверить роль пользователя на главной странице

Проверить роль пользователя на главной странице

от Станислав Сивинский -
Количество ответов: 6

Здравствуйте, мне нужно проверить роль зашедшего пользователя на главную страницу. А также на других страницах. С целью вывода различного меню в теме оформления. Тема оформления используется https://moodle.org/plugins/theme_enlightlite. Каким образом осуществить проверку роль пользователя? 

Что я пытался сделать?


Создал файл access.php в папке theme/enlightlite/db/


$capabilities = array(

    'moodle/enligthlite:user' => array(

        'riskbitmask' => RISK_XSS,

        'captype' => 'read',

        'contextlevel' => CONTEXT_SYSTEM,

        'archetypes' => array(

            'user' => CAP_ALLOW

        )

    ),


    'moodle/enligthlite:student' => array(

        'riskbitmask' => RISK_XSS,

        'captype' => 'read',

        'contextlevel' => CONTEXT_SYSTEM,

        'archetypes' => array(

            'student' => CAP_ALLOW

        )

    ),


В локальной версии Moodle 3.3+ все отработало. На сервере проходит успешная установка темы. И в разделе Администрирование/Пользователи/Определить роли/Аутентифицированный пользователь в правах не появляется новое право от моей темы. Хотя в локальной появилось.

Как быть? Как проверить пользователя зашедшего на главную страницу frontpage что это Гость, студент или учитель?

Ранее была штучка (has_capability('moodle/legacy:user', $context) Сейчас не работает. Как осуществить проверку?


В ответ на Станислав Сивинский

Re: Проверить роль пользователя на главной странице

от Vadim Tabunshchik -
Изображение пользователя Developers
мне нужно проверить роль зашедшего пользователя на главную страницу

А что там проверять? Зашел или админ, или любой другой пользователь, у которого роль будет одна - та, которая указана в параметре defaultfrontpageroleid. Других ролей тут быть не может, если только вы специально не назначали какие-то роли глобально, в контексте системы. Поэтому на главной странице сайта, где контекст для всех один ($context = context_system::instance()), можно вывести только 2 разных меню: одно для админа, второе - для всех остальных.

В курсах проще, там $context = context_course::instance($courseid) и можно проверить права пользователя по разрешению, типичному только для определенной роли, например, у редактирующего преподавателя это право moodle/course:update

И тему оформления тут не нужно вовсе редактировать. Вы хоть в одной теме видели access.php? Что, будем выбирать, показывать ли эту тему студенту (преподавателю, управляющему, др.) или обойдется без оформления? Ну, глупо же улыбаюсь

В локальной версии Moodle 3.3+ все отработало. На сервере проходит успешная установка темы. И в разделе Администрирование/Пользователи/Определить роли/Аутентифицированный пользователь
в правах не появляется новое право от моей темы. Хотя в локальной появилось.

На локальной версии вы, наверное, зту отредактированную тему устанавливали впервые, а на сервер она уже была установлена ранее, вы просто добавили (заменили) файлы исправленными. В таком случае access.php и не сработает. Нужно удалять тему полностью и устанавливать отредактированную заново. Но, как я уже сказал, это не имеет никакого смысла.

Как проверить пользователя зашедшего на главную страницу frontpage что это Гость, студент или учитель?

Никак. См. выше: на главной не может быть ролей, кроме админа и defaultfrontpageroleid. Гость - любой не авторизованный, т. е., isguestuser

Ранее была штучка (has_capability('moodle/legacy:user', $context) Сейчас не работает.

Слово legacy не смущает. Вот поэтому это сейчас и не работает. Удалили, как устаревшее.

Как осуществить проверку?

Посмотрите плагин Filters: FilterCodes

Как использовать его в «Настраиваемые элементы меню» (custommenuitems), описано тут:

В ответ на Vadim Tabunshchik

Re: Проверить роль пользователя на главной странице

от Станислав Сивинский -

"И тему оформления тут не нужно вовсе редактировать. Вы хоть в одной теме видели access.php? Что, будем выбирать, показывать ли эту тему студенту (преподавателю, управляющему, др.) или обойдется без оформления? Ну, глупо же"

Задача выводить на главной странице. 

Описание действий для гостя, студента, преподавателя.

Не только меню и футер. Но и контент. Такая задача поставлена передо мной. Была бы это проверка в module не вопрос. А вот для темы таких вещей не видел. Но задачу поставили. Разделить интерфейс этих пользователей на главной.

В ответ на Vadim Tabunshchik

Re: Проверить роль пользователя на главной странице

от Станислав Сивинский -

"На локальной версии вы, наверное, зту отредактированную тему устанавливали впервые, а на сервер она уже была установлена ранее, вы просто добавили (заменили) файлы исправленными. В таком случае access.php и не сработает"

Это я знаю. По опыту написания прошлого модуля для тестирования. Т.к. все эти переменные идут в таблицы mdl_role_capabilities и mdl_capabilities. Во время установки плагина.

В ответ на Vadim Tabunshchik

Re: Проверить роль пользователя на главной странице

от Станислав Сивинский -

"Никак. См. выше: на главной не может быть ролей, кроме админа и defaultfrontpageroleid. Гость - любой не авторизованный, т. е., isguestuser" 

Спасибо) Пока сделаю проверку только на гостя и авторизованного пользователя. А дальше буду думать.

В ответ на Станислав Сивинский

Re: Проверить роль пользователя на главной странице

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

Используйте другие механизмы ограничения, например, проверку по содержанию полей профиля пользователя

В ответ на Vadim Tabunshchik

Re: Проверить роль пользователя на главной странице

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

На локальной версии вы, наверное, зту отредактированную тему устанавливали впервые, а на сервер она уже была установлена ранее, вы просто добавили (заменили) файлы исправленными. 

Если действительно так, то нужно в version.php увеличить номер версии, потом зайти на страницу уведомлений и провести обновление. При обновлении перезагрузятся в кэш роли и строки языкового пакета