Люди помогите пожалуйста пропали права администратора moodle. Как их востановить где в БД выставляются права альзователей?
Переустаовка системы не помогла так как очевидно права сохраняются в БД а она не изменилась при переустановке.
Люди помогите пожалуйста пропали права администратора moodle. Как их востановить где в БД выставляются права альзователей?
Переустаовка системы не помогла так как очевидно права сохраняются в БД а она не изменилась при переустановке.
Пользователь с правами главного администратора (который назначается при установке системы) имеет ID=2 в таблице "mdl_user" базы данных "moodle" (если Вы не меняли при установке предложенные по умолчанию названия).
Для начала проверьте наличие в в таблице "mdl_user" пользователя с ID=2 и соответствующие ему данные (логин, фамилию и т.д.)
Этот пользователь есть и я под ним захожу, только теперь у него права не admin a как будто создатель курса или что то в этом роде
Подскажите пожалуйста в каких таблицах рыть именно привелегии этого пользователя?
Вспомните, с переопределением ролей не игрались, ничего не меняли с ролями?
В том то и дело что игрались но не я, а мой научный руководитель, я не знаю что именно он делал но рылся он в ролях.
А теперь ни одному из пользователей определение ролей не доступно, что делать?
Посмотрите соответствие значений в таблицах значениям по умолчанию:
mdl_role
id=1 name=Администратор shortname=admin
mdl_role_allow_assign
id=1 roleid=1 allowassign=1
mdl_role_allow_override
id=1 roleid=1 allowoverride=1
Совет - никому никогда не давайте пароль главного администратора.
Сейчас погляжу спасибо
Ничего не понимаю все поля такие же как у вас, где же собака зарыта?
Блин диплом горит
Сравните еще одну таблицу: mdl_role_capabilities
Должны совпадать первые ПЯТЬ колонок
Смотрите вложение.
И эта таблица совпадает только у меня в ней 1000 строк, я вот что заметил когда я пытаюсь назначить роли из под своего "admin" пользователя у меня вываливается куча ошибок посмотрите
>> только у меня в ней 1000 строк
Я обрезал лишние строки (касающиеся отдельных модулей)...
Зачем назначаете роли на уровне Пользователя? Здесь все должно быть ПУСТО!
Нужно назначить роль администратора на уровне ЯДРА системы:
Управление - Пользователи - Права - Назначить глобальные роли.
Так нету панели управления системой как в нее зайти? Раньше у меня именно этот пользователь был админом и была панель
Попробуйте по прямой сылке http://ВАШ_САЙТ/admin/roles/assign.php?contextid=1
А блок Управление (Администрирование), случаем, НЕ СКРЫТ (удален)?
Не ничего не скрыто а попытка пройти по ссылке говорит "Извините, но у Вас нет прав сделать это (Assign roles to users)"
Предпоогаю что как то нужно изменить роли и права пользователя напрямую из базы, но вот только как?
Давайте попробуем сначала поподробнее...
Сравните поля в таблицах:
mdl_role
id=1 name=Администратор shortname=admin
2 Создатели курса coursecreator
3 Преподаватель editingteacher
4 Ассистент (нередактирующий преподаватель) teacher
5 Студент student
6 Гость guest
7 Аутентифицированный пользователь user
mdl_role_allow_assign
id=1 roleid=1 allowassign=1
2 1 2
3 1 4
4 1 3
5 1 5
6 1 6
7 2 4
8 2 3
9 2 5
10 2 6
11 3 4
12 3 5
13 3 6
mdl_role_allow_override
id=1 roleid=1 allowoverride=1
2 1 2
3 1 4
4 1 3
5 1 5
6 1 6
7 1 7
И внимательно таблицу mdl_role_capabilities (приводил раньше)
Проверил все таблици совпадение полное где не совпадало подправил, результат 0 ни каких изменениу видимо дело в чем то другом
Есть еще табличка mdl_role_name мож там чего
Спасибо
>> где не совпадало подправил, результат 0 ни каких изменениу
Новую сессию начинали? Советую перегрузагрузить сервер, и заново войти в систему.
mdl_role_name у меня пустая.
Да перезагружал я его уже всяко разно безрезультатно
Вы не знаете в какой таблице задаются параметры главной страници?
Главная страница - всегда курс с ID=1
Часть параметров описана в таблице mdl_course
Увы ничего не помогает
гм. А вы уверены, что у вас роль админа не изменялась ?
Роль админа - это только слова, а права лежат в mdl_capabilities.
неплохо бы сравнить таблички mdl_capabilities на убитой и на рабочей системе.
или можно попытаться восстановить эту таблицу и посмотреть не появились ли права.
А вы мне не скините рабочую версию таблички mdl_capabilities
Оригинальной у меня нет.
кроме mdl_capabilities еще нужно проверять/восстанавливать mdl_role_capabilities.
бекапов нет ?
Я могу сделать дамп этих табличек.
PS судя по ошибкам - что-то разрушено в базе данных. Смотрите логи базы данных!
Сравните с записями в файле из приложения.
Обратите внимание на moodle/site; moodle/role; moodle/course
Права на отдельные активные элементы можно не сравнивать.
И эти таблици в точности такие же как у вас, ничего не понимаю видимо придется все начинать с нуля
Большое спасибо Вы мне очень помогли
Добрый день, Пётр.
Ваш пример является печальной демонстрацией того, что систему должны обслуживать профессионалы. И чем дороже данные - тем больше потенциальный ущерб будет превышать экономию от того, что система была поручена кому-то "внагрузку" забесплатно.
И еще это хороший пример того, что начальству никогда нельзя давать полный админский доступ к "боевому серверу" - с начальства потом не спросишь, а шишки все на инженера.
Кидаю Вам скриптик, который инженеры ООО "Открытые технологии" используют в таких ситуциях. Скопируйте код в файл, поместите файл в корень Moodle, откройте его в браузере. Он создат роль "инженер" с полными правами и назначит туда пользователя 'admin'. Я его поправил руками немножно (сократил, убрав необязательные проверки и другие операции), не отлаживал. Если не заработает - пишите
<?
error_reporting(E_ALL);
ini_set('display_errors', '1');
require_once(dirname(__FILE__) . '/config.php');
error_reporting(E_ALL);
ini_set('display_errors', '1');
$roleid = create_role('System engineer', 'engineer', "System support engineer", 'moodle/legacy:admin');
reset_role_capabilities($roleid);
if ($user = get_record('user','username','admin'))
{
$context = get_context_instance(CONTEXT_SYSTEM);
role_assign($roleid, $user->id, 0, $context->id, time(), 0, true);
echo 'ok';
}
?>
Скрипт вернул мне это "id, 0, $context->id, time(), 0, true); echo 'ok'; } ?>"
пытался зайти в систему из под пользователя admin не вышло, что я делаю не так?
Плохо дело. На экране должно быть только
"ok"
Скорее всего Вы либо забыли начальный <? либо файл не имеет расширения php. То что у Вас выдалось означает, что скрипт просто не опознан как PHP.
Да, и Виталий верно подметил, нужно исправление в строчке подключения config.php.
Либо не в корень, а в любой каталог в корне moodle (например в lib/), либо в корень, но изменить
require_once(dirname(__FILE__) . '/../config.php');
на
require_once(dirname(__FILE__) . '/config.php');
Да, верно, забыл поправить (исходный скрипт был расчитан на запуск из вложенной папки).
Поправил
require_once(dirname(__FILE__) . '/../config.php');
на
require_once(dirname(__FILE__) . '/config.php');
И скрипт вернул мне следующее
Warning: require_once(/www/rff-moodle.tsu.ru/www./config.php) [function.require-once]: failed to open stream: No such file or directory in /www/rff-moodle.tsu.ru/www/x.php on line 4
Fatal error: require_once() [function.require]: Failed opening required '/www/rff-moodle.tsu.ru/www./config.php' (include_path='.:/usr/local/share/pear') in /www/rff-moodle.tsu.ru/www/x.php on line 4
Пётр, судя по тексту ошибки, у Вас не "require_once(dirname(__FILE__) . '/config.php');", а "require_once(dirname(__FILE__) . './config.php');". Скорее-всего ошиблись, удаляя лишние слеши и точки.
Вы когда-нибудь программировали на PHP? Вам нужно добиться, чтобы функция require_once() подключила конфигурационный файл moodle.
Увы я радиотехник и опыта в php у меня нет
Ошибка была именно в этом, спасибо.
Запустил я скрипт и вернул он мне это "there is already a role with this name!" вмест OK
Видимо это из-за того что я запускал скрипт не один раз.
Пытаюсь зайти под именем admin без пароля не пускает, скажите пожалуйста что мне делать дальше?
Вставьте (замените) пароль в базе данных у нужного Вам пользователя на:
827ccb0eea8a706c4c34a16891f84e7b
Это означает, что его пароль - 12345
1 если я правильно понял скрипт должен был создать пользователя admin но его нет в базе
2 вы уверенны что у меня 12345 будет зашифрованно именно так? на сколько я знаю в файле config.php есть строчка каторая задает параметры кодирования паролей и она у всех разная
Спасибо
1. Скрипт создаст роль "инженер" с полными правами и назначит туда пользователя 'admin'. У Вас же был пользователь с логином 'admin' ?
2. Раньше срабатывало... Насчет настроек Вашего сайта - я уже ни в чем не уверен.
В базе пользователей нет пользователя с логином admin я на сколько помню такого не создавал
Его создал инсталятор moodle. Если в базе нет такого юзера, то это очень плохо.
Либо база разрушена, либо похакали, либо удалили по незнанию/ошибке
Не факт, для главного пользователя можно любой логин задать.
Под каким логином был главный администратор? В базе данных нужно его найти, дальше вместо текущего логина поставить "admin". Из таблицы ролей удалите запись про "System engineer". Дальше запускайте еще раз скрипт, который дал Алексей. Роль должна снова создаться, найдется пользователь "admin" и ему дадутся права администратора.
Дальше пробуйте зайти под учетной записью "admin".
Еще, как вариант, можно в самом скрипте поставить нужный логин.
Если пользователя admin нет, то подставьте любой другой логин, например свой. Второй раз создавать роль не нужно, поэтому строчку, создающую роль при повторных запусках надо закомментировать.
А вообще, судя по-всему, у вас в базе данных уже "жабы и черви"... Вообще, странно, ведь никто не согласится лечь на операцию к академику физ-мат наук, ветеренару, автослесарю (очень-очень хорошему) или просто "способному студенту", который "перед операцией почитает форумы и во всём разберется". Однако когда речь идет об информационной системе, пусть даже содержащей учебные материалы, результаты работы студентов, оценки - с довольно высокой общей стоимостью, никто не смущается.
У нас с вами совпали мысли.
Если закомментировать, то скрипт ничего не будет знать про переменную $roleid. Тогда нужно будет заменить создание на извлечение идентификатора роли из базы.
Спасибо всем огромное, благодаря вам я запустил скрипт и он отработал и выдал "ок" и создал роль "System ingineer" но моему пользователю ничего не назначил и роль "System ingineer" никому не назначенна, что теперь посоветуете?
А ошибки продолжают выводиться? Ничего не изменилось, кроме добавления новой роли?
Опишите, как вы поправили скрипт.
В скрипте я вписал свой логин который раньше был администратором, удалил из базы запись о роли system ingneer запустил скрипт он отработал написал что все "ок" . Захожу под этим логином в систему... ничего... ни панели администрирования ни каких либо других признаков того что пользователю добавилось привилегий. Вот такие вот синдромы.
Роль system ingneer создалась но пользователям не присвоилась попытка назначить себе роль system ingneer увенчалась кучей ошибок:
Notice: Undefined variable: fullname in /www/rff-moodle.tsu.ru/www/admin/roles/assign.php on line 137
Notice: Undefined variable: fullname in /www/rff-moodle.tsu.ru/www/admin/roles/assign.php on line 140
Notice: Trying to get property of non-object in /www/rff-moodle.tsu.ru/www/user/tabs.php on line 94
Notice: Trying to get property of non-object in /www/rff-moodle.tsu.ru/www/user/tabs.php on line 96
Notice: Trying to get property of non-object in /www/rff-moodle.tsu.ru/www/user/tabs.php on line 97
Notice: Trying to get property of non-object in /www/rff-moodle.tsu.ru/www/user/tabs.php on line 119
Notice: Trying to get property of non-object in /www/rff-moodle.tsu.ru/www/user/tabs.php on line 145
Notice: Trying to get property of non-object in /www/rff-moodle.tsu.ru/www/user/tabs.php on line 166
Notice: Trying to get property of non-object in /www/rff-moodle.tsu.ru/www/user/tabs.php on line 171
Notice: Trying to get property of non-object in /www/rff-moodle.tsu.ru/www/user/tabs.php on line 175
Notice: Trying to get property of non-object in /www/rff-moodle.tsu.ru/www/user/tabs.php on line 187
Notice: Trying to get property of non-object in /www/rff-moodle.tsu.ru/www/user/tabs.php on line 192
Notice: Trying to get property of non-object in /www/rff-moodle.tsu.ru/www/user/tabs.php on line 197
Notice: Trying to get property of non-object in /www/rff-moodle.tsu.ru/www/user/tabs.php on line 202
Notice: Trying to get property of non-object in /www/rff-moodle.tsu.ru/www/user/tabs.php on line 208
Notice: Trying to get property of non-object in /www/rff-moodle.tsu.ru/www/user/tabs.php on line 234
Notice: Trying to get property of non-object in /www/rff-moodle.tsu.ru/www/user/tabs.php on line 239
Самое интересное что роль назнаилась и пользователь числится как system ingneer но по факту прав никаких
Если можете, сделайте экспорт базы в файл через phpMyAdmin, пришлите мне на почту, я посмотрю что можно сделать.
И скажите, заодно, версию мудла (из version.php можно взять).
Адрес почты отправил личным сообщением.
роль назнаилась и пользователь числится как system ingneer но по факту прав никаких
Так и будет, потому что проблема глубже, о чем говорят приведенные Вами ошибки - Incorrect context specified и остальные, связанные со словами context. Система не понимает, в каком контексте назначать права пользователю, в таблице mdl_context
творится полный бардак, уж извините
Исправлением одних таблиц, отвечающих за роли, тут не обойтись, т .к. при назначении какой-то роли в каком-то контексте какому-то пользователю создается также запись в таблице mdl_context.
В этой таблице поле contextlevel - это уровни (контексты):
'CONTEXT_SYSTEM', 10 - уровень системы, сайта в целом
'CONTEXT_USER', 30 - * пользователя
'CONTEXT_COURSECAT', 40 - * категории курсов
'CONTEXT_COURSE', 50 - * курса
'CONTEXT_MODULE', 70 - * модуля
'CONTEXT_BLOCK', 80 - * блока
Поле instanceid связано с ключами id таблиц mdl_user, mdl_course, mdl_course_categories и др.
Это я к тому, что Вашу систему проще переустановить, чем вылечить, так как в этой "каше" сейчас даже специалисту разбираться долго и нудно.