Annotations

aKraus

Erfahrenes Mitglied
Hallo zusammen,

gibt es in PHP die Möglichkeit, Methoden von Klassen mit selbst entwickelten Annotations zu versehen und diese dann an anderer Stelle abzufragen?

ähnlich, wie es in Java möglich ist

Danke für die Antworten. Beim Googlen bin ich nicht wirklich fündig geworden
 
Ich will ja keinen Fehler erzeugen.
Ich will der Methde bestimmte Eigenschaften zuordnen und ggf. irgendwo anders wieder abrufen
 
ich hab ein bisschen rumgespielt und ein Framework im mvc pattern entwickelt.
Darin gibt es Methoden von Controllern, die nur mit bestimmten Berechtigungen aufgerufen werden sollen. Diese würde ich gerne über Annotations setzen, so dass diese dann automatisch abgeprüft werden.

Warum? Ich hab einen Admin und einen Public Bereich. Im Adminbereich soll jede Methode, die vom Core Controller aus aufgerufen wird, nur mit Berechtigungen zugänglich sein. Und so kann ich sicherstellen, dass Berechtigungen auch immer abgeprüft werden. Wirds vergessen diese zu setzen, kann ich eine Exception werfen
 
Mh, da musst du wohl mal ein bisschen Code zeigen.
Aber die bestehenden Frameworks kommen auch meist mit einem Authentication Modul daher, haben das auch also "irgendwie" implementiert. Ich habe jetzt keine Lust mir da die Implementierungen reinzuziehen, da dort meist noch eine recht komplexe ACL im Hintergrund arbeitet (Rechte, Rollen, Gruppen).

Generell sollte das Authentication-Modul aber eifnach einen user entgegennehmen und seine berechtigungen prüfen und zurückgeben.

Im Controller selber rufst du dieses Modul dann entweder
A) im Konstruktor auf
B) in einer bestimmten Methode (um diese nur für bestimmte User erreibar zu machen)

Mal nen kurzer Pseudocode wo die User-Klasse direkt diese Aufgabe übernimmt (so solltest du das nicht machen):
PHP:
<?php

class AdminController extends Controller
{

	public function __construct($user)
	{
		if (!$user->isAuthenticated()) {
			throw new Exception('Not authenticated');
		}
		// ...
	}
	
	// ...
}

$user = UserFactory::createFromSession();
$controller = new AdminController($user);

Das führt mich aber direkt dazu anzumerken, dass es dort nicht sinnvoll ist eine Exception(=Ausnahme) zu werfen, da es ja keine Uasnahme ist. Es heißt lediglich, dass der User etwas machen will, wozu er nicht berechtigt ist. Das gehört doch durchaus zum Normalverhalten oder nicht?
 
Nein, du verstehst mich falsch. Ich will die Exception schmeißen, wenn der Programmierer es versäumt hat, bei Methoden im Adminbereich Berechtigungen zu setzen.

PHP:
// public - zum anzeigen der News auf der Website
protected function newsAction($newst_alias = null, $page = null) {

}

/**
 * admin - zum bearbeiten von News - nur über Berechtigung möglich
 * @Permission('NEWS_ADMIN');
 */
protected function tableAction($action, $news_id = null) {

}

Klar, könnte ich die Berechtigung auch in der Methode tableAction abprüfen, jedoch kann es passieren, dass es vergessen wird. Da tableAction nur im Adminbereich aufgerufen wird, kann ich beim Vergessen von @Permission() eine Exception schmeißen
 
Zurück