Як визначити, чи є користувачем Super User?


20

Щоб визначити, чи відвідувач є гостем , ми використовуємо щось подібне:

if ($user->guest) {
echo 'Hello, guest!';
}

Тепер, якщо я хочу визначити, відвідувач зареєстрований SuperUser (адміністратор) чи ні, який би був код для цього?

У мене є декілька зовнішніх PHP-файлів, до яких я не хочу бути доступними ніким, крім SuperUsers мого веб-сайту Joomla. Просто намагаюся захистити файли, імпортуючи Joomla CMS.


1
Смішно мені це було потрібно минулої ночі і просто гуглило, поки я не знайшов рішення. У моєму випадку я змінив вихід з RSFiles, тому панель інструментів відображається лише для адміністраторів.
Брайан Торф

1
Насправді $ user-> get ('isRoot'), що є у прийнятій відповіді, не слід використовувати. Швидше за все, в останніх версіях Joomla (3.6 і пізніших версіях) вона не працюватиме, коли викликається так, як поза межами JUser :: autize (). Використовуйте замість $ user-> autize ("ваші парами тут"), як-от відповідь dev-m.
FFrewin

Відповіді:


28

ці коди визначать, чи поточний користувач, який увійшов у систему, є суперкористувачем чи ні -

$user = JFactory::getUser();
$isroot = $user->authorise('core.admin');

цей код перевірить, що відображено у дозволі "Супер Користувач" у глобальній конфігурації, а не лише на рівні компонентів. Перевірте це сам, порівнюючи з іншими способами.


2
Пояснення у цій відповіді трохи слабке, але я думаю core.admin, що це кращий дозвіл на перевірку, ніж core.edit.
Brilliand

1
Я не погоджуюсь. core.admin - це дозвіл, який використовується для контролю доступу до глобальної конфігурації, тому це відповідний спосіб перевірити, чи користувач є супер адміністратором. Якщо ви перевіряєте на групу 8, як прийнята відповідь, якщо Joomla! коли-небудь вирішить рандомізувати його задля безпеки, ваш сценарій зламається. Завжди кодуйте з урахуванням змін. Якщо ви ніколи не маєте наміру оновити.
Метью Леннінг

Це, очевидно, найкраща відповідність для перевірки SuperUser. Він перевірить як несправність, так і дозвіл SuperUser. github.com/joomla/joomla-cms/blob/staging/libraries/joomla/user/… Іншою альтернативою є $ user-> get ('isRoot'), яка передбачає, що авторизація вже була використана для заповнення стану isRoot. IsRoot можна використовувати безпосередньо, оскільки це захищена власність. github.com/joomla/joomla-cms/blob/staging/administrator/…
Пітер Вісман

Просто, щоб усунути будь-які сумніви щодо правильності цього коду чи ні: цей код використовується в ядрі Joomla (Joomla 3.5.1), щоб перевірити, чи користувач це супер адміністратор чи ні. Ви можете знайти його в рядку 747 libraries/joomla/user/user.phpфайлу. Саме цей:$iAmSuperAdmin = $my->authorise('core.admin');
іктоктоп

8

Щоб визначити статус "Супер Користувача", Ви повинні перевірити $user->isRoot. Це властивість встановлюється після першої перевірки авторизації та виявлення користувача супер адміністратором.

Однак зазвичай вам краще хочеться перевірити, чи є у користувача певні дозволи, як описано в інших відповідях.


3
Це передбачає, що $ user-> autize () вже викликало щось інше, щоб заповнити властивість isRoot. Також зауважте, що властивість isRoot захищено, тому йому потрібно отримати доступ через $ user-> get ('isRoot').
Пітер Вісман

6

Спробуйте це,

$user  = JFactory::getUser();

$user_groups = $user->groups;

print_r($user_groups);

Це поверне масив, за замовчуванням користувачі Joomla Admin Super admin (Групи 8) та Адміністратор (Група 7).

Ви можете перевірити, чи має масив будь-яке з цих значень, тоді він повинен бути користувачем адміністратора, якщо ви створили користувацьку групу користувачів, то вам також потрібно перевірити #__usergroups parent Id.

Сподіваюся, це допомагає ..


6

Ви можете використовувати умову, щоб відмовити будь-кому, хто не входить до певної групи.

$user = JFactory::getUser();
$groups = $user->groups;

if (in_array(8, $groups)):

 //only enter if the user is in the group 8 (group 8 = Super-Administrator)

endif;

1
Магічне число - не чудове рішення. Ви можете надати дозвіл Super Admin будь-якій групі та / або видалити групу Super Admin за замовчуванням.
Девід Хейс

Я використав щось подібне, if(in_array(8, $user->groups))і це спрацювало на мене
Linga

4

Спробуйте нижче код, щоб перевірити, чи користувач для входу в систему супер адміністратор чи інші користувачі ...

$user = JFactory::getUser();
$isAdmin = $user->get('isRoot');
if ($isAdmin) {
echo 'You are an Administrator';
}
else  {
echo 'You are not Administrator';
}

OR

function isSuperAdmin()
{
  $user = JFactory::getUser();
  return $user->get('isRoot');
}    

if (isSuperAdmin()) 
{
  echo 'You are an Administrator';
}
else  {
  echo 'You are not Administrator';
}

1
Насправді $ user-> get ('isRoot') не слід використовувати. Швидше за все, в останніх версіях Joomla (3.6 і пізніших версій) вона не працюватиме при виклику подібного за межами JUser :: autize (). Використовуйте замість $ user-> autize ("ваші парами тут"), як-от відповідь dev-m.
FFrewin

Я спробую це спочатку, дякую за вказівку. :)
saibbyweb

1
$user->get('isRoot');не працює для J3.6.2.
saibbyweb

2

Joomla @since 3.2, поле UserGroupList використовує це для перевірки:

$isSuperUser = JFactory::getUser()->authorise('core.admin');

Ця відповідь дуже схожа на відповідь @ dev-m .
Farahmand

@Farahmand ви праві, я щойно додав, щоб підтвердити, що є кращим методом Joomla, і що він все ще діє для версії Joomla 3+
Педро Бікудо Маскіо

Добре. У будь-якому разі, питання вже позначено joomla-3.x .
Farahmand
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.