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

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

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

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

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

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

Почему так?

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

Спасибо!

Комментарии

Аватар пользователя Junegton Junegton 8 декабря 2014 в 23:57

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

Аватар пользователя gun_dose gun_dose 9 декабря 2014 в 8:31

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

Аватар пользователя Junegton Junegton 11 декабря 2014 в 21:55

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

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

Аватар пользователя drupby drupby 11 декабря 2014 в 22:23

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

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

global $user;
 
if (in_array('administrator', $user->roles) || in_array('moderator', $user->roles)) {
  //code
}
else {
  //code
}
Аватар пользователя Grayw0lf Grayw0lf 11 декабря 2014 в 23:03

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

Аватар пользователя drupby drupby 11 декабря 2014 в 23:12

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

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

Аватар пользователя Junegton Junegton 12 декабря 2014 в 11:28

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

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

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

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

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

Спасибо!

Аватар пользователя gun_dose gun_dose 12 декабря 2014 в 11:55

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

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

Аватар пользователя Grayw0lf Grayw0lf 12 декабря 2014 в 12:44

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

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

Аватар пользователя Orion76 Orion76 12 декабря 2014 в 14:28

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

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

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

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

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

Аватар пользователя Junegton Junegton 12 декабря 2014 в 22:51

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

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

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

Спасибо!

Аватар пользователя Orion76 Orion76 12 декабря 2014 в 23:10

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

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

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

Аватар пользователя Junegton Junegton 15 января 2015 в 11:32

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

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