Ошибка с "Доступ запрещен" для анонимоуса к нодам

Главные вкладки

Аватар пользователя relaxer relaxer 13 декабря 2009 в 13:13

Win32
Drupal 6.14 + руссификация
Апач 2.2.14
PHP 5.3.1
MySQL 5.0.45

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

Вопросы:

1. Где грабли?
2. Как вообще работает механизм аутентификации для анонимоуса, чтобы его отрассировать и самому посмотреть?

Всем заранее тнх.

Комментарии

Аватар пользователя relaxer relaxer 13 декабря 2009 в 13:28

Gukov Yor wrote:
admin/user/permissions

как и написано выше чекбокс поставлен в "доступ к содержанию сайта" - но пока только там. Где еще?

Аватар пользователя Gukov Yor Gukov Yor 13 декабря 2009 в 13:33

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

Аватар пользователя relaxer relaxer 13 декабря 2009 в 13:42

Gukov Yor wrote:
почитайте что пишет в логах

Логи /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

Поиск как и было указано выше ничего не дал - следствие мои посты здесь. Друпал мудит, это очевидно, хочу понять вопрос
платформы или друпала. Где посмотреть ПХП код аутентификации анонимоуса?

Аватар пользователя GDI@drupal.org GDI@drupal.org 13 декабря 2009 в 13:48

Посмотрите в таблице users, есть ли пользователь с uid = 0, это и есть анонимус. Если нет, то его надо создать, только я не помню параметры которые ему надо указать. Вообще такая тема поднималась и не раз "ищите и обрящете".

Аватар пользователя relaxer relaxer 13 декабря 2009 в 13:54

<a href="mailto:GDI@drupal.org">GDI@drupal.org</a> wrote:
Посмотрите в таблице users, есть ли пользователь с uid = 0, это и есть анонимус. Если нет, то его надо создать, только я не помню параметры которые ему надо указать. Вообще такая тема поднималась и не раз "ищите и обрящете".

Давайте без тривиальных советов "про обрящете". Выше было написано что "танцы с users" были произведены.

Аватар пользователя GDI@drupal.org GDI@drupal.org 13 декабря 2009 в 14:18

А для нетривиальных советов надо написать нечто более подробное чем "танцы с бубнами". Я на 90% уверен что когда вы не поленитесь и распишете, что же вы конкретно делали, вы сами найдете ответ на свой хорошо поставленный вопрос.
Я бы для начала отключил и удалил node_access, зачем он, если у вас есть проблемы с доступом? Или это тоже в танцах уже было?

Аватар пользователя relaxer relaxer 13 декабря 2009 в 14:50

Что интересно в списке из : "чтение форума, гугла, node_access, users, пересоздание прав, чекбокс для показа содержимого анонимоусу, делание ноды публикованной и показываемой на главной странице" есть неконкретного...
Конкретизирую:
1. Я поискал/прочитал ФОРУМ
2. Я поискал ГУГЛОМ
3. Я провепил таблицу node_access запросом "SELECT * FROM node_access n;" и получил фетч как пишут ЛЮДИ
4. Я проверил таблицу users запросом "SELECT * FROM users u;" и узнал что у меня все таки есть пользователи с уином 0 (т.е. анонимоус) и администратор
5.Я зашел на страницу с разрешениями и проверил есть ли чекбокс на доступ анонимоусов к содержимому.
6. Я обновил права
7. Я проверил чтобы бы у "проблемной" ноды были проставены чекбоксы - Опубликовать и Показать на индексе.
Итак, повторяю вопрос - что можно проверить еще?

Аватар пользователя relaxer relaxer 13 декабря 2009 в 16:43

Для пользователя анонимоус в целях эксперимента проставлены ВСЕ права из возможным. Результата не принесло.

Аватар пользователя Alex_R Alex_R 13 декабря 2009 в 18:21

А Кэш сайта после создания ноды чистили? Хотя скорее всего в "танцы с бубном" это входит в первую очередь....

Аватар пользователя Dan Dan 13 декабря 2009 в 18:36

"<a href="mailto:GDI@drupal.org">GDI@drupal.org</a>" wrote:
Я бы для начала отключил и удалил node_access, зачем он, если у вас есть проблемы с доступом? Или это тоже в танцах уже было?

Это "ядерная" таблица друпала, управляющая доступом к контенту. К модулю node_access отношения не имеет.
Топикстартер её проверил на значение по умолчанию...

Для решения проблемы можно отдебажить функцию node_access вызванную с параметрами проверки доступа какой-либо ноды для анонима - сразу станет понятно где она "спотыкается".

Аватар пользователя edhel edhel 13 декабря 2009 в 20:20

Посмотреть что возвращает node_access и её "потрейсить". Можно админом создать пхп-ноду примерно такую:

<?php
print node_access('view', node_load(3), user_load(0));
?>

Если возвращает ложь, то навставлять всякие print-ы в исходник node_access.

Аватар пользователя Ромка Ромка 13 декабря 2009 в 21:37

"relaxer" wrote:
3. Я провепил таблицу node_access запросом "SELECT * FROM node_access n;" и получил фетч как пишут ЛЮДИ

То есть у вас там одна строка со значениями: nid = 0, gid = 0, realm = all, grant_view = 1, grant_update = 0, grant_delete = 0?

Аватар пользователя relaxer relaxer 14 декабря 2009 в 20:09

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;
}

Сдеается мне что кнопка пересоздания прав не в-ж-ж-ж-ж толком, хотя это субъективно, что в результате должно генериться после пересоздания прав, кроме одной строки в ноде_аксессе?

Аватар пользователя relaxer relaxer 14 декабря 2009 в 20:18

Переменная $account открылась явила свое нутро:

stdClass Object ( [uid] => 0 [hostname] => 127.0.0.1 [roles] => Array ( [1] => anonymous user ) [session] => [cache] => 0 )

Аватар пользователя relaxer relaxer 14 декабря 2009 в 21:11

edhel wrote:
Копать в 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 - дало ОСОЗНАНИЕ тщетности бытия Smile

Аватар пользователя relaxer relaxer 14 декабря 2009 в 21:06

Что и говорить, но кто то в друпале явно не але. Поскольку никто мне не отвечал понормальному, кроме 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. Все написанно выше техническое м.б. и не правильно, посему готов быть поправленным

Аватар пользователя edhel edhel 15 декабря 2009 в 4:01

"relaxer" wrote:
Что и говорить, но кто то в друпале явно не але

Кто ж мог подумать, что Вы id-шники у ролей поменяли. Я вообще в эти таблицы никогда не смотрю.

Аватар пользователя Dan Dan 15 декабря 2009 в 10:36

"relaxer" wrote:
И УМНИКИ из друпала почему то всегда считают что РИД=1 это вот бля роль для анонимоуса по умолчанию. Почему, отчего, хз

Это друпал-константа, так же как uid 0 и 1. Если у вас так настроен мускуль, то uid юзеров тоже должен быть 3 и 6 для анонима и супер админа, правильно я понимаю?

Аватар пользователя relaxer relaxer 15 декабря 2009 в 19:38

Dan wrote:
"relaxer" wrote:
И УМНИКИ из друпала почему то всегда считают что РИД=1 это вот бля роль для анонимоуса по умолчанию. Почему, отчего, хз

Это друпал-константа, так же как uid 0 и 1. Если у вас так настроен мускуль, то uid юзеров тоже должен быть 3 и 6 для анонима и супер админа, правильно я понимаю?

нет, пользователи имеют 0 и 1 соот. Тут то все они в лоб написали при инсерте. Про role просто забыли Smile

Аватар пользователя Azerot Azerot 15 декабря 2009 в 12:21

Топикстартер прав, что вообще-то это баг.
Да, никто не мешает принять некоторые константы, но тогда и инициализация базы начальными значениями должна быть правильной! Т.е. скрипт инициализации БД не должен надеяться на автоинкремент, а прописывать в таблицу КОНКРЕТНЫЕ значения. Баг однозначно!

Аватар пользователя Dan Dan 15 декабря 2009 в 20:49

"relaxer" wrote:
нет, пользователи имеют 0 и 1 соот. Тут то все они в лоб написали при инсерте. Про role просто забыли =)

Тогда баг. relaxer, а 7-ка тоже им страдает? Проверь плиз на своей конфигурации.

Аватар пользователя relaxer relaxer 15 декабря 2009 в 21:23

Dan wrote:
"relaxer" wrote:
нет, пользователи имеют 0 и 1 соот. Тут то все они в лоб написали при инсерте. Про role просто забыли =)

Тогда баг. relaxer, а 7-ка тоже им страдает? Проверь плиз на своей конфигурации.

7-ка при инстале дает "съехавший" инпут для имени сервера и как следствие не дает его ввести, а сл не инсталится
понормальному. Тоже кривая. Но она вроде и не заявлена как стабильная.

Аватар пользователя kostaLom kostaLom 25 января 2010 в 18:55

"relaxer" wrote:
Есть табличка role. В ней есть две записи rid=1, name=anonymous user и rid=2, name=authenticated user.

Спасибо, это действительно помогло!