it-swarm.com.de

Wie kann der Zugriff auf benutzerdefinierte Komponentenansichten eingeschränkt werden?

In meiner benutzerdefinierten Komponente möchte ich bestimmte Ansichten nur auf bestimmte Benutzergruppen beschränken können. Wenn ich einen Menüeintrag für eine meiner Ansichten erstelle, ist das ganz einfach: Ich wähle einfach die Zugriffsebene für diesen Menüeintrag aus und bin fertig.

Das Problem tritt nun auf, wenn jemand versucht, mit option = com_mycomponent direkt auf eine URL zuzugreifen, oder wenn eine der internen Weiterleitungen meiner Komponente auf eine Seite ohne zugewiesene Itemid verweist. In diesem Fall ist es die Komponente selbst, die benötigt wird um die Benutzergruppe zu überprüfen und festzustellen, ob diese Seite angezeigt werden kann ... wie kann ich das in meinem Code einschränken? Nur eine einfache, fest codierte Überprüfung der Benutzergruppe des Benutzers? Oder gibt es eine "Standard" -Methode dafür?

Ich habe die Dokumentation überprüft und Folgendes festgestellt:

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

aber das ist für das, was Benutzer tun können, nicht für das, was Benutzer sehen können. Ich habe auch diesen Forenthread gefunden:

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

der Code am Anfang ist ziemlich alt, aber am Ende wird empfohlen, dies zu verwenden:

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

Wie soll ich dafür vorgehen? Soll ich Assets für das von meiner Ansicht generierte Hauptobjekt definieren, damit ich den Zugriff mit JUser testen kann?

Danke im Voraus.

11
Isidro Baquero

Sie können ein System-Plugin erstellen, um alle Anforderungen an Ihre benutzerdefinierte Komponente zu verarbeiten, bevor Sie die Steuerung an die Komponente senden.

Verwenden Sie das Ereignis onAfterRoute, um alle Zugriffsüberprüfungen durchzuführen.

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

Hier ist der Code, mit dem Sie beginnen müssen, um zu sehen, in welchen Gruppen sich ein Benutzer befindet.

$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

Wahrscheinlich die späte Antwort auf diese Frage. Aber hier ist was ich benutzt habe:

In der main controller.php-Datei habe ich die Anzeigefunktion wie folgt überschrieben:

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