Joomla - Определение, является ли вошедший в систему пользователь администратором - PullRequest
1 голос
/ 26 июля 2010

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

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

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

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

Ответы [ 5 ]

3 голосов
/ 06 августа 2010

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

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

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

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

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

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

2 голосов
/ 26 июля 2010

Питер,

Я согласен с мнением 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>";
    }

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

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

джим

0 голосов
/ 29 января 2016

Вы можете проверить «назначенные группы пользователей» вошедшего в систему пользователя, используя функцию 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 для каждой группы пользователей в базе данных:

Снимок здесь

0 голосов
/ 05 августа 2010

Если имя пользователя вашего администратора joomla равно admin, тогда вы можете использовать код, приведенный ниже

$user =& JFactory::getUser();
if($user->usertype == "Super Administrator" && $user->username == "admin")
{
  //... do what ever
}
0 голосов
/ 04 августа 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...