Технические вопросы

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

 
Изображение пользователя Станислав Сивинский
Проверить роль пользователя на главной странице
 

Здравствуйте, мне нужно проверить роль зашедшего пользователя на главную страницу. А также на других страницах. С целью вывода различного меню в теме оформления. Тема оформления используется 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: Проверить роль пользователя на главной странице
DevelopersОсобо активный участник форумаЭксперт по Moodle
мне нужно проверить роль зашедшего пользователя на главную страницу

А что там проверять? Зашел или админ, или любой другой пользователь, у которого роль будет одна - та, которая указана в параметре 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), описано тут:

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

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

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

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

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

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

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

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

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

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

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

Изображение пользователя Vadim Dvorovenko
Re: Проверить роль пользователя на главной странице
DevelopersМайнтейнер переводаТестер MoodleЭксперт по Moodle

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

Изображение пользователя Vadim Dvorovenko
Re: Проверить роль пользователя на главной странице
DevelopersМайнтейнер переводаТестер MoodleЭксперт по Moodle

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

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