[РЕШЕНО]: Любой становится админом...

8 декабря 2014 в 20:40
Аватар пользователя Junegton Junegton 0 18

Всем доброго времени суток!
Возникла проблема при темизации страницы ноды.
На странице должна выводиться разная информация для админа и для остальных юзеров. В пхп задаю такое условие:

   <?php 
global $user;
if  (
$user->uid=1
бла бла бла
                     ?>
 

Суть проблемы - этот код любого пользователя (авторизованного или ананима) делает админом с ID=1!!! Т.е. он залогинивает его под учеткой первого админа?

Почему так?

Кстати условие для обычных пользователей if ($user->uid>1) работает отлично!

Спасибо!

Комментарии

Спасибо, понял ошибку. Какое должно быть правильное и главное безопасное решение для моего случая. Т.е. если страницу смотрит админ - одно видно, если нет - другое.
Как написать условие?

8 декабря 2014 в 23:57

а вообще, на будущее оператор равенства - это "==". И да, правильно сказали, что нужно смотреть по роли администратора, а не по айдишнику, т.к. админов может быть и несколько.

9 декабря 2014 в 8:31

Всем спасибо, сработало на 100%.

Возник вопрос, если вместо "administrator" я вобью другое машинное имя роли, то для нее такой подход тоже будет работать?

11 декабря 2014 в 21:55

"Junegton" wrote:
если вместо "administrator" я вобью другое машинное имя роли, то для нее такой подход тоже будет работать?

можно указать и для нескольких ролей

global $user;
 
if (in_array('administrator', $user->roles) || in_array('moderator', $user->roles)) {
  //code
}
else {
  //code
}
11 декабря 2014 в 22:23

кстати в in_array в качестве первого аргумента можно передавать массив, поэтому условие для нескольких ролей можно переписать короче

11 декабря 2014 в 23:03

"Grayw0lf" wrote:
поэтому условие для нескольких ролей можно переписать короче

в случае in_array(array('administrator', 'moderator'), $user->roles) условие сработает если у юзера одновременно 2 роли administrator и moderator, я же писал совсем другое условие
короче, следи за логикой

11 декабря 2014 в 23:12

"drupby" wrote:
in_array(array('administrator', 'moderator'), $user->roles)

эта штука намного облегчает жизнь!Правда не совсем понял "сработает если у юзера сразу две роли" - т.е. если роль только модератора - условие выполнится по ветке else?

Заинтересовало предложение по проверке разрешений - пермишнов.

Возможно ли этот способ прикрутить к ситуации ниже:
У ноды есть несколько полей "файл" (поле fild). Смотря какое поле - к нему пользователи имею разные пермишны в зависимости от роли.

Какой из вариантов лучше использовать - проверка роли или пермишна?

Спасибо!

12 декабря 2014 в 11:28

"Junegton" wrote:
Какой из вариантов лучше использовать - проверка роли или пермишна?

Я сколько смотрел коды модулей из репозитория - в основном ставят пермишн. Суть в том, что проверка пермишнов обеспечивает большую универсальность кода, чем проверка ролей. Ведь на каждом сайте могут быть разные роли, а разрешения у ролей вообще у каждого свои. Если делаешь для себя, то универсальность не нужна. Но кто знает, как ты в будущем отредактируешь права для ролей.

12 декабря 2014 в 11:55

"gun_dose" wrote:
т.е. если роль только модератора - условие выполнится по ветке else?

именно так, т е false.
Имхо, пермишн универсальнее.

12 декабря 2014 в 12:44

"gun_dose" wrote:
в основном ставят пермишн.

Не в основном, а в зависимости от контекста..
Иногда надо проверить роль (авторизирован, администратор, аноним)..
А иногда необходимо конкретное право на конкретное действие..

А так, мне кажется, "читабельнее":

<?php
(bool) array_intersect(array('administrator''moderator'), $user->roles);
?>

UPD..Кстати, с первым параметром массивом, in_array будет работать не правильно..

12 декабря 2014 в 14:28

"Grayw0lf" wrote:
именно так, т е false.

есть ли возможность чтобы условие было не "и", а "или" любая из перечисленных ролей?

условие на проверку пермишна может кто привести?

Спасибо!

12 декабря 2014 в 22:51

"Junegton" wrote:
есть ли возможность чтобы условие было не "и", а "или" любая из перечисленных ролей?

Все выше перечисленные правильные примеры реализуют условие "ИЛИ".

Проверка прав: http://api.drupal.ru/api/function/user_access/6
Для семерки аналогично.
Список прав на странице admin/people/permissions
"машинное имя" наименования, которое передается в функцию user_access
можно посмотреть на той же странице Файербагом- значение чекбокса(Аттрибут value элемента input type=checkbox)

12 декабря 2014 в 23:10

всем спасибо, отписываюсь поздно - но лучше чем никогда.

Может кто подскажет как выполнить проверку на авторство? т.е. является ли пользователь автором ноды?

15 января 2015 в 11:32