2010-07-26 4 views
1

У меня есть тонны веселья, работающие над большим проектом, который по причинам, которые трудно оправдать, основан на Joomla! (что я не хочу критиковать, Joomla! отлично, только не для задачи, с которой я столкнулся в настоящее время), и когда я googled для способа определить, является ли текущий входной пользователь Admin, я нашел сообщение что довольно смело рекомендует использовать следующий код:Joomla - Определить, является ли зарегистрированный пользователь Admin

$user =& JFactory::getUser(); 
if($user->usertype == "Super Administrator" || $user->usertype == "Administrator"){ ... } 

для меня это выглядит довольно странным способом проверки для пользователей с правами администратора. Я был бы признателен за метод $user->isAdmin(), чтобы сделать это, а не пару жестко закодированных строк.

Я не могу найти более элегантное решение для проверки пользователей admin в Joomla! фреймворк. Может ли кто-нибудь помочь?

+0

$ пользователя = & JFactory :: GetUser(); довольно элегантный. Вы можете протестировать все девять типов пользователей (включая четыре типа Администратора) в двух строках кода. Кроме того, в большинстве случаев $ user уже вызывается, и вам просто нужно ввести вторую строку кода. Грустно видеть, что Joomla отходит от этого в 1.6 + – pathfinder

ответ

3

на самом деле, так как уровни доступа являются hard coded into the database в Joomla! 1.5, единственный способ, с помощью которого может сравниться это сравнение строк, - это когда кто-то сознательно взломал в нем новые группы. Строки могут быть изменены в файлах .ini-Files (так что не-английские установки по-прежнему используют английские слова в базе данных - это неверно для других таблиц, таких как имена плагинов или компонентов.)

Вы можете получить группу id через JFactory::getACL(), а затем $acl->getGroupsByUser($userid, false) (см. docs), но при условии, что больший идентификатор означает большие привилегии, также кажется немного взломанным (хотя это верно для стандартной установки).

Кроме этого, вы можете взять на себя Joomla! возможность: определить более конкретно, что такое «пользователь admin»: кто-то, кто может установить новое программное обеспечение? кто может изменить конфигурацию системы?Просто сделайте разумное предположение, что-то связанное с тем, что вы хотите, чтобы он сделал как пользователь admin, используйте его в authorize() -Call (см. docs) и, возможно, документируйте его в своем интерфейсе.

Единственное чистое решение (я знаю): определяет новые записи для ACL-authorize-lookuptable (в настоящее время реализуется только в php, а не в SQL). Это единственный способ убедиться, что это будет Joomla! 1.6-proof, где пользовательские группы пользователей будут доступны (и поэтому пользователь-администратор может выбрать предоставление этой авторизации группе пользователей или нет). Например:

$acl =& JFactory::getACL(); 
$acl->addACL('{com_nameOfExtension}', '{action}', 'users', 'super administrator'); 
$acl->addACL('{com_nameOfExtension}', '{action}', 'users', 'administrator'); 

И там у нас есть их снова, жестко закодированные имена групп. Что ж.

+0

хороший ответ действительно. Спасибо. –

+0

Насколько я знаю, JFactory :: getACL() возвращает экземпляр JAuthorization, у которого нет метода getGroupsByUser() ... http://api.joomla.org/Joomla-Framework/User/JAuthorization.html –

2

Питер,

Я согласен на JOOMLA чувства, мы используем .net/PHP здесь также и есть несколько проектов, которые были начаты на Joomla по неизвестной причине !!

amnyway, еще тоньше, мелкозернистый подход может изучить фактические права, которые имеет пользователь, а не их быть suoper администратор и т.д. Вы можете получить эту информацию по следующим направлениям:

$user =& JFactory::getUser(); 

    if ($user->authorize('com_content', 'edit', 'content', 'all')) { 
      echo "<p>You may edit all content.</p>"; 
    } else { 
      echo "<p>You may not edit all content.</p>"; 
    } 

    if ($user->authorize('com_content', 'publish', 'content', 'own')) { 
      echo "<p>You may publish your own content.</p>"; 
    } else { 
      echo "<p>You may not publish your own content.</p>"; 
    } 

я знаю он по-прежнему жестко запрограммирован, но, по крайней мере, он специфичен для пользователя, а не специфичен. этот подход, тем не менее, позволяет вам ориентироваться на определенные «связанные с компонентом» привилегии, поэтому может быть полезно для вас.

Я отслежу ответы, чтобы узнать, есть ли «правильный» ответ, поскольку он определенно является упущением.

jim

+0

ура, джим. Я просто смотрел на функцию authorize(), но это не совсем то, что мне нужно. Мне часто приходится специально проверять только одного супер администратора, а затем фильтровать или не фильтровать некоторые записи на панели администрирования. Мне часто нужно проверить, является ли зарегистрированный пользователь «Super Admin» или «Admin». –

+0

peter - в этом случае поиск продолжается :) –

+0

Я думаю, мне придётся предложить щедрость :-), но только очень маленькая –

0

Следующее может быть взлом на Joomla. Я попробовал и работал.

Возьмем случай сессий

$_SESSION[__default][user]->usertype; 

Это даст тип пользователя, вошедшего в вы можете использовать это в каких-либо условных операторов

+0

извините, но я знаю, как добраться до атрибута user user, заметили в самом вопросе: $ user = & JFactory :: getUser(); if ($ user-> usertype == ... Но это все еще возвращает только строковое представление типа пользователя, а затем я должен выполнять сравнения строк ... –

-1

Если ур имя пользователя администратора Joomla это admin то и можно использовать ниже код aspeter описано ранее

$user =& JFactory::getUser(); 
if($user->usertype == "Super Administrator" && $user->username == "admin") 
{ 
    //... do what ever 
} 
+0

О, нет, нет, нет. как и когда-либо. В тот момент, когда кто-то настраивает администратора для использования другого имени, все приложение будет разбиваться в разных местах. Кроме того, рекомендуется изменить имя пользователя по умолчанию для пользователя для чего-то другого для производственной системы. –

+0

извините Питер, im также новичок, я просто предлагаю, благодаря обновлению моих знаний. – JustLearn

+0

. Еще лучше, используйте пользователя admin только для создания другого пользователя Super admin и дезактивации первого. Это как переименование папки-администратора (что менее удобно) держите 90% легких атак. – giraff

0

Вы можете проверить «назначенные группы пользователей» вошедшего в систему пользователя с помощью функции getUser().

$user =& JFactory::getUser(); 

$assigned_usergroups = $user->groups; // Array of assigned User Group 

    if (in_array(8, $assigned_usergroups)) { 
     echo "Super Admin"; 
    } 

    else if (in_array(7, $assigned_usergroups)) { 
     echo "Admin"; 
    } 

    else {  
     echo "Other"; //Any of Guest/Public/Others 
    } 

Вы можете увидеть следующий снимок предопределенных идентификаторов в Joomla для каждой группы пользователей в базе данных:

Snapshot here

Смежные вопросы