войти в систему пользователя и предоставления основных прав в Joomla - PullRequest
0 голосов
/ 18 мая 2018

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

function forceLogin($superuserId)
{
    $user = JFactory::getUser($superuserId);
    //Will authorize you as this user.
    JPluginHelper::importPlugin('user');
    $options = array();
    $options['action'] = 'core.login.site';
    $response = new stdClass();
    $response->username = $user->username;
    $response->language = '';
    $response->email = $user->email;
    $response->password_clear = '';
    $response->fullname = '';
    $result = $app->triggerEvent('onUserLogin', array((array)$response, $options));
    return true;
}

При этом мой текущий логин будет суперпользователем.Теперь проблема заключается в том, что когда какое-либо расширение ищет разрешения, оно все еще получает информацию о том, что в текущем сеансе их нет, и поэтому возвращает false.

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

Я получил что-то в getNotification ()

function getNotification()
{
    //from here I log in the user
    $this->forceLogin($speruserId);

    //and now redirect
    $app = JFactory::getApplication();
    $app->redirect('index.php?option=com_mycomponent&task=setNotification');
}

Теперь я продолжаю дальнейший запрос от setNotification ()

function getNotification()
{
    // do my work here
}

Чтобы быть конкретным, проблема заключается ввозникающих в VirtueMart (расширение электронной коммерции), в котором я создаю продукт из моего звонка, и при создании продукта он проверяет vmAccess::manager('product.create'), что на самом деле совпадает с core.create Joomla.

Я думаю, перенаправляясеанс сбрасывается с текущим пользователем, и поэтому он получает все разрешения.Можно ли это сделать без перенаправления?Если да, то как?

...