Запретить доступ к файлу отдельно от Joomla, если вы не вошли в Joomla

Я использую Joomla 3.1, и у меня есть опция в пользовательском компоненте, который я создал, к которому вы можете получить доступ, войдя в административную панель Joomla, которая экспортирует CSV. Он ссылается на файл PHP, который экспортируется в CSV (с типом MIME), а данные являются личными и конфиденциальными. Поскольку этот связанный файл является отдельной сущностью, есть ли способ включить некоторый код PHP в начало этого файла PHP, который проверяет, вошел ли пользователь в систему как администратор, и запрещает доступ, если нет?


person thecommonthread    schedule 16.07.2013    source источник


Ответы (4)


Кулак получить вошедший в систему пользовательский объект. Получите идентификатор его группы. Идентификатор группы для суперадминистратора в Joomla 2.5+ равен 8. Поэтому проверьте, имеет ли пользователь идентификатор группы = 8, а затем разрешите доступ к странице.

$checkuser = JFactory::getUser();
$userGroups = $checkuser->get('groups');
if (in_array(8, $userGroups)){
  //allow access
}
person Aditya    schedule 19.07.2013

Вот как я решил эту проблему. Это в значительной степени /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>";



///////////////////////////////////////////////////////////////////////////////////////////////////

    }
}

?>
person cecilomar    schedule 23.08.2013

Что-то вроде этого:

if($admin){
    //allow access
} else {
    //deny access
}

$admin является заполнителем и должен быть заменен

person Paul Dessert    schedule 16.07.2013
comment
Да, я на самом деле ищу более продвинутый код, который будет получать текущие данные входа в систему из Joomla, чтобы проверить, вошел ли администратор в систему или нет. Я не мог найти ничего, что действительно работало бы для меня. Самое близкое, что я мог получить, было отсюда: docs.joomla.org/JFactory/getUser - person thecommonthread; 16.07.2013

Почему бы вам не включить этот PHP-файл в фреймворк Joomla и не позволить ему работать как обычному представлению?

Если вы хотите, чтобы автономный скрипт проверял, вошел ли пользователь в систему, вам придется вручную создать экземпляр среды Joomla в вашем файле и выполнить проверку там. Это, наверное, больше работы, чем включить скрипт в Joomla :-)

person Bakual    schedule 18.07.2013
comment
Поскольку файл PHP, к которому осуществляется доступ, имеет заголовок, определяющий, что файл становится типом mime CSV, поэтому в основном вся причина для файла заключается в том, что он является загрузкой файла CSV. Может быть, я все-таки выдержу? - person thecommonthread; 18.07.2013
comment
Создать файл CSV из Joomla не проблема. Это не сильно отличается от создания представления канала. Для этого можно использовать тип документа raw. Используйте &format=raw в URL-адресе и view.raw.php вместо view.html.php, и он будет работать с использованием обычного представления. - person Bakual; 19.07.2013