Я работаю над проектом, который требует некоторого доступа на уровне менеджера для выполнения задач, поэтому, когда я получаю звонок, я принудительно регистрирую запрос как суперпользователь, чтобы у него были все разрешения для выполнения этой задачи.Для входа в систему я использую этот код:
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.
Я думаю, перенаправляясеанс сбрасывается с текущим пользователем, и поэтому он получает все разрешения.Можно ли это сделать без перенаправления?Если да, то как?