Win32
Drupal 6.14 + руссификация
Апач 2.2.14
PHP 5.3.1
MySQL 5.0.45
Ноды не хотят показывать анонимоусу. Все танцы с бубнами, а именно : чтение форума, гугла, node_access, users, пересоздание прав, чекбокс для показа содержимого анонимоусу, делание ноды публикованной и показываемой на главной странице - произвел.
Вопросы:
1. Где грабли?
2. Как вообще работает механизм аутентификации для анонимоуса, чтобы его отрассировать и самому посмотреть?
Всем заранее тнх.
Комментарии
admin/user/permissions
как и написано выше чекбокс поставлен в "доступ к содержанию сайта" - но пока только там. Где еще?
почитайте что пишет в логах, возможно страниц нет а вы смотрите кэш, если всё сделано правильно Друпал не мудит а помогает в случае возникновения проблем, скорее всего у вы где-то что-то упускаете. Ну на крайняк поиском пробегитесь.
Логи /admin/reports/dblog
access denied 12/13/2009 - 13:24 node/3 Гость
Логи Апача
127.0.0.1 - - [13/Dec/2009:13:24:10 +0300] "GET / HTTP/1.1" 403 4566
127.0.0.1 - - [13/Dec/2009:13:24:14 +0300] "GET /node/3 HTTP/1.1" 403 4566
Поиск как и было указано выше ничего не дал - следствие мои посты здесь. Друпал мудит, это очевидно, хочу понять вопрос
платформы или друпала. Где посмотреть ПХП код аутентификации анонимоуса?
Посмотрите в таблице users, есть ли пользователь с uid = 0, это и есть анонимус. Если нет, то его надо создать, только я не помню параметры которые ему надо указать. Вообще такая тема поднималась и не раз "ищите и обрящете".
Давайте без тривиальных советов "про обрящете". Выше было написано что "танцы с users" были произведены.
А для нетривиальных советов надо написать нечто более подробное чем "танцы с бубнами". Я на 90% уверен что когда вы не поленитесь и распишете, что же вы конкретно делали, вы сами найдете ответ на свой хорошо поставленный вопрос.
Я бы для начала отключил и удалил node_access, зачем он, если у вас есть проблемы с доступом? Или это тоже в танцах уже было?
Что интересно в списке из : "чтение форума, гугла, node_access, users, пересоздание прав, чекбокс для показа содержимого анонимоусу, делание ноды публикованной и показываемой на главной странице" есть неконкретного...
Конкретизирую:
1. Я поискал/прочитал ФОРУМ
2. Я поискал ГУГЛОМ
3. Я провепил таблицу node_access запросом "SELECT * FROM node_access n;" и получил фетч как пишут ЛЮДИ
4. Я проверил таблицу users запросом "SELECT * FROM users u;" и узнал что у меня все таки есть пользователи с уином 0 (т.е. анонимоус) и администратор
5.Я зашел на страницу с разрешениями и проверил есть ли чекбокс на доступ анонимоусов к содержимому.
6. Я обновил права
7. Я проверил чтобы бы у "проблемной" ноды были проставены чекбоксы - Опубликовать и Показать на индексе.
Итак, повторяю вопрос - что можно проверить еще?
А вот эти танцы вы смотрели?
http://drupalist.org.ru/FAQ/2.14.html
Для пользователя анонимоус в целях эксперимента проставлены ВСЕ права из возможным. Результата не принесло.
А Кэш сайта после создания ноды чистили? Хотя скорее всего в "танцы с бубном" это входит в первую очередь....
Это "ядерная" таблица друпала, управляющая доступом к контенту. К модулю node_access отношения не имеет.
Топикстартер её проверил на значение по умолчанию...
Для решения проблемы можно отдебажить функцию node_access вызванную с параметрами проверки доступа какой-либо ноды для анонима - сразу станет понятно где она "спотыкается".
Посмотреть что возвращает node_access и её "потрейсить". Можно админом создать пхп-ноду примерно такую:
<?php
print node_access('view', node_load(3), user_load(0));
?>
Если возвращает ложь, то навставлять всякие print-ы в исходник node_access.
То есть у вас там одна строка со значениями: nid = 0, gid = 0, realm = all, grant_view = 1, grant_update = 0, grant_delete = 0?
2 Ромка:
Да, только одна.
2 edhel :
Сделал вот так :
if (node_access('view', node_load(3), user_load(0))) {
echo "TRUE";
} else {
echo "FALSE" ;
};
для всех вариантов (без логина, логин пользователем с ролью анонимоус, логин с ролью админ выдает ) FALSE
Было оттрасировано как умелось в нотепаде - сработало это...
if (!user_access('access content', $account)) {
echo 4;
return FALSE;
}
Сдеается мне что кнопка пересоздания прав не в-ж-ж-ж-ж толком, хотя это субъективно, что в результате должно генериться после пересоздания прав, кроме одной строки в ноде_аксессе?
Переменная $account открылась явила свое нутро:
stdClass Object ( [uid] => 0 [hostname] => 127.0.0.1 [roles] => Array ( [1] => anonymous user ) [session] => [cache] => 0 )
Копать в user_access, почему она возвращает FALSE при проверке 'access content'...
в user_access()
вот это вот - не делало фетч нормальный
$result = db_query("SELECT p.perm FROM {role} r INNER JOIN {permission} p ON p.rid = r.rid WHERE r.rid IN (". db_placeholders($account->roles) .")", array_keys($account->roles));
изучение $account->roles и таблицы role - дало ОСОЗНАНИЕ тщетности бытия
Что и говорить, но кто то в друпале явно не але. Поскольку никто мне не отвечал понормальному, кроме edhel и Dan, то пришлось все делать самому (когда же бля все будет нажал и в-ж-ж-ж-ж само собой...). Есть табличка role. В ней есть две записи rid=1, name=anonymous user и rid=2, name=authenticated user. Так это создается друпалом при инсталляции по умолчанию. И УМНИКИ из друпала почему то всегда считают что РИД=1 это вот бля роль для анонимоуса по умолчанию. Почему, отчего, хз. Но, есть нормальные пацаны (я например) у которым майэскуль сервера объединены в репликационнные цепочки для двухсторонней репликации (что вообщета разумно например при общей базе для интранет и интернет веб серверов). И эти пацаны, дабы избежать конфликта уникальности автоинкрементых первичных ключей при репликации делают каждому серверу свой шаг при присвоении автоинкремента. Мои танцы производятся на сервере с шагом равным 3 (my.ini - auto_increment_increment=3 и auto_increment_offset=3), что ессно дает при создании последовательно двух записей в role - rid № 1 = 3 и rid № 2 = 6. А это ОТЛИЧАЕТСЯ от 1 и 2, что очевидно...
----------------------------------------------------------------------------------------------
ИТАК новое "па" в ТАНЦЕ с бубном : если у тебя доступ анониму не але - проверь таблицу role - запись анонимоуса должна иметь rid=1.
----------------------------------------------------------------------------------------------
1.Я не стал дальше изучать корни зла, просто сделал update эти двух rid'ов на 1 и 2. Наверное что то еще может работать не корректно из за сдвигов по фазе автоинкремента, но очевидно, что друпалу надо бы это пропатчить. Уже не знаю и кому писать, но думаю ЛЮДИ подскажут.
2. Изучая проблему запрета доступа анониму, я наткнулся на массу информации как здесь так и на друпал.орг, но здесь не видел фака, в которым было бы раз-два-три. Везде разные советы. ИМХО, не очень удобно.
3. Все написанно выше техническое м.б. и не правильно, посему готов быть поправленным
Кто ж мог подумать, что Вы id-шники у ролей поменяли. Я вообще в эти таблицы никогда не смотрю.
Это друпал-константа, так же как uid 0 и 1. Если у вас так настроен мускуль, то uid юзеров тоже должен быть 3 и 6 для анонима и супер админа, правильно я понимаю?
нет, пользователи имеют 0 и 1 соот. Тут то все они в лоб написали при инсерте. Про role просто забыли
Топикстартер прав, что вообще-то это баг.
Да, никто не мешает принять некоторые константы, но тогда и инициализация базы начальными значениями должна быть правильной! Т.е. скрипт инициализации БД не должен надеяться на автоинкремент, а прописывать в таблицу КОНКРЕТНЫЕ значения. Баг однозначно!
как в всегда в n-ёрке поправят
Если только кто-то его запостит
Тогда баг. relaxer, а 7-ка тоже им страдает? Проверь плиз на своей конфигурации.
7-ка при инстале дает "съехавший" инпут для имени сервера и как следствие не дает его ввести, а сл не инсталится
понормальному. Тоже кривая. Но она вроде и не заявлена как стабильная.
Спасибо, это действительно помогло!