it-swarm-eu.dev

Come limitare l'accesso alle viste dei componenti personalizzate?

Nel mio componente personalizzato, vorrei essere in grado di limitare viste specifiche solo a determinati gruppi utenti. Se creo una voce di menu per una delle mie viste, è abbastanza facile da fare: seleziono semplicemente il livello di accesso per quella voce di menu e il gioco è fatto.

Ora, il problema si presenta se qualcuno tenta di accedere direttamente a un URL con option = com_mycomponent o uno qualsiasi dei reindirizzamenti interni del mio componente va a una pagina senza Itemid assegnato ... in quel caso, è il componente stesso quello che deve per controllare il gruppo di utenti e determinare se è in grado di visualizzare quella pagina ... come posso limitarlo nel mio codice? Solo un semplice controllo hardcoded per il gruppo utenti dell'utente? O c'è un modo "standard" per farlo?

Ho controllato la documentazione e ho trovato questo:

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

ma questo è per ciò che l'utente può fare, non per ciò che l'utente può vedere. Ho anche trovato questa discussione nel forum:

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

il codice all'inizio è piuttosto vecchio, ma alla fine si consiglia di utilizzare questo:

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

Come devo procedere? Devo definire le risorse per l'oggetto principale generato dalla mia vista in modo da poter testare l'accesso per esso con JUser?

Grazie in anticipo.

11
Isidro Baquero

È possibile creare un plug-in di sistema per gestire tutte le richieste al componente personalizzato prima di inviare il controllo al componente.

Utilizzare l'evento onAfterRoute per eseguire tutti i controlli di accesso.

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
}
9
Nick

Ecco il codice necessario per iniziare mostrando come vedere in quali gruppi si trova un utente.

$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/>';
}
4
GDP

Probabilmente la risposta tardiva a questa domanda. Ma ecco cosa ho usato:

Nel file controller.php principale ho ignorato la funzione di visualizzazione come segue:

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);
 }
4
Sahil Purav