Как ограничить доступ к пользовательским представлениям компонентов?

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

Теперь проблема возникает, если кто-то пытается напрямую получить URL-адрес с параметром = com_mycomponent, или любое внутреннее перенаправление моего компонента переходит на страницу без назначенного Itemid ... в этом случае это сам компонент который должен проверять группу пользователей и определять, может ли она просматривать эту страницу ... как я могу ограничить это в своем коде? Просто простая жесткая проверка для пользовательской группы пользователей? Или существует «стандартный» способ для этого?

Я проверяю документацию и нашел это:

http://docs.joomla.org/J2.5:How_to_implement_actions_in_your_code

, но это то, что пользователь может сделать, а не то, что пользователь может видеть. Я также нашел эту тему в форуме:

http://forum.joomla.org/viewtopic.php?t=530721

код в начале довольно старый, но в конце рекомендуется использовать это:

http://api.joomla.org/cms-3/classes/JUser.html #method_authorise

Как я должен продолжать это? Должен ли я определять активы для основного объекта, сгенерированного моим представлением, чтобы я мог проверить доступ для него с помощью JUser?

Спасибо заранее.

9 голосов | спросил Isidro Baquero 25 22014vEurope/Moscow11bEurope/MoscowTue, 25 Nov 2014 15:20:52 +0300 2014, 15:20:52

3 ответа


8

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

Используйте onAfterRoute для выполнения всех проверок доступа.

function onAfterRoute()
{
  $user = JFactory::getUser();
  $groups = $user->groups;

  $jinput = JFactory::getApplication()->input;
  $option = $jinput->get('option', '');
  $view   = $jinput->get('view', '');

  // place USER-GROUP related checking here
}
ответил Nick 26 32014vEurope/Moscow11bEurope/MoscowWed, 26 Nov 2014 07:41:06 +0300 2014, 07:41:06
4

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

$user = JFactory::getUser();
$groups = $user->groups;
if($user->id) {
    echo $user->username.' is logged in<Br/>';
    if (isset($groups[8])) echo " - User is a Super User <Br/>";
    if (isset($groups[7])) echo " - User is an Administrator <Br/>";
    if (isset($groups[6])) echo " - User is an Manager <Br/>";
}else{
    echo 'Not logged in<Br/>';
}
ответил GDP 25 22014vEurope/Moscow11bEurope/MoscowTue, 25 Nov 2014 16:27:37 +0300 2014, 16:27:37
4
Вероятно, поздний ответ на этот вопрос. Но вот что я использовал:

В основном файле controller.php я переопределил функцию отображения следующим образом:

public function display($cachable = false, $urlparams = array())
{
        $user = JFactory::getUser();
        $app  = JFactory::getApplication();

        $view = $this->input->get('view');

        if ($view == 'someview' || $view == 'anotherview')
        {
            if ($user->get('guest') == 1)
            {
                $uri = JUri::getInstance();
                $this->setRedirect(
                        JRoute::_('index.php?option=com_users&view=login&return=' . base64_encode($uri->toString())), $app->enqueueMessage(JText::_('COM_YOURCOMPONENT_LOGIN_REQUIRED'), 'warning')
                );

                return;
            }
         }

        parent::display($cachable, $urlparams);
 }
ответил Sahil Purav 13 Maypm15 2015, 14:52:04

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132