Wie erkenne ich, ob ein Benutzer ein Superuser ist?

20

Um festzustellen, ob der Besucher ein Gast ist , verwenden wir Folgendes:

if ($user->guest) {
echo 'Hello, guest!';
}

Wenn ich nun feststellen möchte, ob der Besucher ein registrierter Superuser (Administrator) ist oder nicht, wie lautet der Code dafür?

Ich habe einige externe PHP-Dateien, auf die nur die SuperUser meiner Joomla-Website zugreifen dürfen. Ich versuche nur, die Dateien durch Importieren von Joomla CMS zu sichern.

saibbyweb
quelle
1
Komischerweise habe ich das letzte Nacht gebraucht und nur gegoogelt, bis ich eine Lösung gefunden habe. In meinem Fall habe ich die Ausgabe von RSFiles überschrieben, sodass die Symbolleiste nur für Administratoren angezeigt wird.
Brian Peat
1
Eigentlich sollte $ user-> get ('isRoot'), das in der akzeptierten Antwort steht, nicht verwendet werden. Höchstwahrscheinlich funktioniert es in den neuesten Joomla-Versionen (3.6 und höher) nicht, wenn es außerhalb von JUser :: authorize () so aufgerufen wird. Verwenden Sie stattdessen $ user-> authorize ('your params here'), wie die Antwort von dev-m.
FFrewin

Antworten:

28

Diese Codes bestimmen, ob der aktuell angemeldete Benutzer ein Superuser ist oder nicht.

$user = JFactory::getUser();
$isroot = $user->authorise('core.admin');

Mit diesem Code wird überprüft, was der Berechtigung "Super User" in der globalen Konfiguration und nicht nur auf Komponentenebene zugeordnet ist. Prüfen Sie es selbst und vergleichen Sie es mit anderen Methoden.

dev-m
quelle
2
Die Erklärung in dieser Antwort ist ein bisschen schwach, aber ich denke, es core.administ eine bessere Erlaubnis zu prüfen als core.edit.
Brilliand
1
Ich stimme dir nicht zu. core.admin ist die Berechtigung, mit der der Zugriff auf die globale Konfiguration gesteuert wird. Auf diese Weise können Sie überprüfen, ob ein Benutzer der Superadministrator ist. Wenn Sie für die Gruppe 8 wie die akzeptierte Antwort überprüfen, wenn Joomla! Wenn Sie sich aus Sicherheitsgründen für eine zufällige Zuordnung entscheiden, wird Ihr Skript beschädigt. Codieren Sie immer unter Berücksichtigung von Änderungen. Es sei denn, Sie beabsichtigen niemals ein Upgrade.
Mathew
Dies ist eindeutig die beste Übereinstimmung für einen SuperUser-Check. Es wird sowohl nach der Ausfallsicherheit als auch nach der SuperUser-Berechtigung gesucht. github.com/joomla/joomla-cms/blob/staging/libraries/joomla/user/… Die andere Alternative ist $ user-> get ('isRoot'), die davon ausgeht, dass authorize bereits zum Auffüllen des isRoot-Status verwendet wurde. Der isRoot kann direkt verwendet werden, da es sich um eine geschützte Eigenschaft handelt. github.com/joomla/joomla-cms/blob/staging/administrator/…
Peter Wiseman
Nur um Zweifel daran auszuräumen, ob dieser Code korrekt ist oder nicht: Dieser Code wird in Joomlas Kern (Joomla 3.5.1) verwendet, um zu überprüfen, ob der Benutzer ein Superadministrator ist oder nicht. Sie finden es in Zeile 747 der libraries/joomla/user/user.phpDatei. Es ist dieses:$iAmSuperAdmin = $my->authorise('core.admin');
Itoctopus
8

Um den Status "Super User" zu ermitteln, müssen Sie dies überprüfen $user->isRoot. Diese Eigenschaft wird festgelegt, nachdem die erste Berechtigungsprüfung durchgeführt wurde und festgestellt wurde, dass der Benutzer ein Superadministrator ist.

In der Regel sollten Sie jedoch überprüfen, ob der Benutzer über bestimmte Berechtigungen verfügt, wie in den anderen Antworten beschrieben.

Bakual
quelle
3
Dies setzt voraus, dass $ user-> authorize () bereits von etwas anderem aufgerufen wurde, um die Eigenschaft isRoot zu füllen. Beachten Sie auch, dass die isRoot-Eigenschaft geschützt ist und daher über $ user-> get ('isRoot') zugegriffen werden muss.
Peter Wiseman
6

Versuche dies,

$user  = JFactory::getUser();

$user_groups = $user->groups;

print_r($user_groups);

Dies gibt ein Array zurück. Standardmäßig sind die Joomla Admin-Benutzer "Super Admin" (Gruppen 8) und "Administrator" (Gruppe 7).

Sie können überprüfen, ob das Array einen dieser Werte hat. Dann sollte es Admin-Benutzer sein. Wenn Sie eine benutzerdefinierte Benutzergruppe erstellt haben, müssen Sie dies ebenfalls überprüfen #__usergroups parent Id.

Ich hoffe es hilft..

Jobin Jose
quelle
6

Sie können eine Bedingung verwenden, um zu verweigern, wer keiner bestimmten Gruppe angehört.

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

if (in_array(8, $groups)):

 //only enter if the user is in the group 8 (group 8 = Super-Administrator)

endif;
Adam Tremblay Lavoie
quelle
1
Magische Zahlen sind keine gute Lösung. Sie können jeder Gruppe Super-Admin-Berechtigungen erteilen und / oder die Standard-Super-Admin-Gruppe löschen.
David Hayes
Ich habe so etwas benutzt if(in_array(8, $user->groups))und es hat bei mir funktioniert
Linga
4

Versuchen Sie den folgenden Code, um zu überprüfen, ob der angemeldete Benutzer ein Superadministrator oder ein anderer Benutzer ist ...

$user = JFactory::getUser();
$isAdmin = $user->get('isRoot');
if ($isAdmin) {
echo 'You are an Administrator';
}
else  {
echo 'You are not Administrator';
}

OR

function isSuperAdmin()
{
  $user = JFactory::getUser();
  return $user->get('isRoot');
}    

if (isSuperAdmin()) 
{
  echo 'You are an Administrator';
}
else  {
  echo 'You are not Administrator';
}
PCMShaper
quelle
1
Eigentlich sollte $ user-> get ('isRoot') nicht verwendet werden. Höchstwahrscheinlich wird es in den neuesten Joomla-Versionen (3.6 und höher) nicht funktionieren, wenn es außerhalb von JUser :: authorize () wie folgt aufgerufen wird. Verwenden Sie stattdessen $ user-> authorize ('your params here'), wie die Antwort von dev-m.
FFrewin
Ich werde es zuerst testen, danke für den Hinweis. :)
saibbyweb
1
$user->get('isRoot');funktioniert nicht für J3.6.2.
Saibbyweb
2

Joomla @since 3.2, Feld UserGroupList verwendet dies, um Folgendes zu überprüfen:

$isSuperUser = JFactory::getUser()->authorise('core.admin');
Pedro Bicudo Maschio
quelle
Diese Antwort ist der Antwort von @ dev-m sehr ähnlich .
Farahmand
@ Farahmand Sie haben Recht, ich habe gerade hinzugefügt, um zu bestätigen, was Joomla bevorzugte Methode ist und dass es noch für Joomla Version 3+ gültig ist
Pedro Bicudo Maschio
Okay. Wie auch immer, die Frage wurde bereits mit joomla-3.x markiert .
Farahmand