Всем доброго времени суток!
Возникла проблема при темизации страницы ноды.
На странице должна выводиться разная информация для админа и для остальных юзеров. В пхп задаю такое условие:
<?php
global $user;
if ($user->uid=1)
бла бла бла
?>
Суть проблемы - этот код любого пользователя (авторизованного или ананима) делает админом с ID=1!!! Т.е. он залогинивает его под учеткой первого админа?
Почему так?
Кстати условие для обычных пользователей if ($user->uid>1) работает отлично!
Спасибо!
Комментарии
= оператор присвоения
этим кодом вы присваиваете переменной значение, а потом проверяете, не равно ли оно нулю
Спасибо, понял ошибку. Какое должно быть правильное и главное безопасное решение для моего случая. Т.е. если страницу смотрит админ - одно видно, если нет - другое.
Как написать условие?
if (in_array('administrator', $user->roles)) {
//code
}
else {
//code
}
Спасибо, буду пробовать! После отпишусь что вышло!
а вообще, на будущее оператор равенства - это "==". И да, правильно сказали, что нужно смотреть по роли администратора, а не по айдишнику, т.к. админов может быть и несколько.
Всем спасибо, сработало на 100%.
Возник вопрос, если вместо "administrator" я вобью другое машинное имя роли, то для нее такой подход тоже будет работать?
можно указать и для нескольких ролей
if (in_array('administrator', $user->roles) || in_array('moderator', $user->roles)) {
//code
}
else {
//code
}
кстати в in_array в качестве первого аргумента можно передавать массив, поэтому условие для нескольких ролей можно переписать короче
в случае
in_array(array('administrator', 'moderator'), $user->roles)
условие сработает если у юзера одновременно 2 роли administrator и moderator, я же писал совсем другое условиекороче, следи за логикой
если уже так стремиться к совершенству, то нужно не роли проверять, а пермишны.
эта штука намного облегчает жизнь!Правда не совсем понял "сработает если у юзера сразу две роли" - т.е. если роль только модератора - условие выполнится по ветке else?
Заинтересовало предложение по проверке разрешений - пермишнов.
Возможно ли этот способ прикрутить к ситуации ниже:
У ноды есть несколько полей "файл" (поле fild). Смотря какое поле - к нему пользователи имею разные пермишны в зависимости от роли.
Какой из вариантов лучше использовать - проверка роли или пермишна?
Спасибо!
Я сколько смотрел коды модулей из репозитория - в основном ставят пермишн. Суть в том, что проверка пермишнов обеспечивает большую универсальность кода, чем проверка ролей. Ведь на каждом сайте могут быть разные роли, а разрешения у ролей вообще у каждого свои. Если делаешь для себя, то универсальность не нужна. Но кто знает, как ты в будущем отредактируешь права для ролей.
именно так, т е false.
Имхо, пермишн универсальнее.
Не в основном, а в зависимости от контекста..
Иногда надо проверить роль (авторизирован, администратор, аноним)..
А иногда необходимо конкретное право на конкретное действие..
А так, мне кажется, "читабельнее":
<?php
(bool) array_intersect(array('administrator', 'moderator'), $user->roles);
?>
UPD..Кстати, с первым параметром массивом, in_array будет работать не правильно..
есть ли возможность чтобы условие было не "и", а "или" любая из перечисленных ролей?
условие на проверку пермишна может кто привести?
Спасибо!
Все выше перечисленные правильные примеры реализуют условие "ИЛИ".
Проверка прав: http://api.drupal.ru/api/function/user_access/6
Для семерки аналогично.
Список прав на странице admin/people/permissions
"машинное имя" наименования, которое передается в функцию user_access
можно посмотреть на той же странице Файербагом- значение чекбокса(Аттрибут value элемента input type=checkbox)
всем спасибо, отписываюсь поздно - но лучше чем никогда.
Может кто подскажет как выполнить проверку на авторство? т.е. является ли пользователь автором ноды?