Я использую Joomla 3.1, и у меня есть опция в пользовательском компоненте, который я создал, к которому вы можете получить доступ, войдя в административную панель Joomla, которая экспортирует CSV. Он ссылается на файл PHP, который экспортируется в CSV (с типом MIME), а данные являются личными и конфиденциальными. Поскольку этот связанный файл является отдельной сущностью, есть ли способ включить некоторый код PHP в начало этого файла PHP, который проверяет, вошел ли пользователь в систему как администратор, и запрещает доступ, если нет?
Запретить доступ к файлу отдельно от Joomla, если вы не вошли в Joomla
Ответы (4)
Кулак получить вошедший в систему пользовательский объект. Получите идентификатор его группы. Идентификатор группы для суперадминистратора в Joomla 2.5+ равен 8. Поэтому проверьте, имеет ли пользователь идентификатор группы = 8, а затем разрешите доступ к странице.
$checkuser = JFactory::getUser();
$userGroups = $checkuser->get('groups');
if (in_array(8, $userGroups)){
//allow access
}
Вот как я решил эту проблему. Это в значительной степени /index.php из Joomla! Установка 3.1 без всего того, что вам для этого не нужно. Вам нужно найти идентификатор группы, которой вы хотите иметь доступ к файлу. Этот скрипт можно использовать только в корне вашего Joomla! установка как есть.
<?php
/**
* @package JoomlaSessionCustomScript.php
*
* @copyright Copyright (C) 2013 Cecilomar Design, Inc. All rights reserved.
* @license GNU General Public License version 3 or later; see LICENSE.txt
*/
if (version_compare(PHP_VERSION, '5.3.1', '<'))
{
die('Your host needs to use PHP 5.3.1 or higher to run this version of Joomla!');
}
/**
* Constant that is checked in included files to prevent direct access.
* define() is used in the installation folder rather than "const" to not error for PHP 5.2 and lower
*/
define('_JEXEC', 1);
if (file_exists(__DIR__ . '/defines.php'))
{
include_once __DIR__ . '/defines.php';
}
if (!defined('_JDEFINES'))
{
define('JPATH_BASE', __DIR__);
require_once JPATH_BASE . '/includes/defines.php';
}
require_once JPATH_BASE . '/includes/framework.php';
// Instantiate the application.
JFactory::getApplication('site');
$jusersession = $_SESSION['__default']['user'];
///////////////////////////////////////////////////////////////////////////////////////////////////
// GroupID ////////////////////////////////////////////////////////////////////////////////////////
$groupid = 2; /////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////
if($jusersession->guest == true){
echo "Hello guest. You need to login to see the content in this area.";
} else{
if($jusersession->groups[$groupid] == $groupid){
///////////////////////////////////////////////////////////////////////////////////////////////////
// INCLUDE YOUR CODE OR SCRIPT HERE! //////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////
echo "It works!</br><pre>";
// Explore the session variables.
print_r($jusersession);
echo "</pre>";
///////////////////////////////////////////////////////////////////////////////////////////////////
}
}
?>
Что-то вроде этого:
if($admin){
//allow access
} else {
//deny access
}
$admin
является заполнителем и должен быть заменен
Почему бы вам не включить этот PHP-файл в фреймворк Joomla и не позволить ему работать как обычному представлению?
Если вы хотите, чтобы автономный скрипт проверял, вошел ли пользователь в систему, вам придется вручную создать экземпляр среды Joomla в вашем файле и выполнить проверку там. Это, наверное, больше работы, чем включить скрипт в Joomla :-)