Also.. ich bin gerade dabei, meine eigene "Konditionalsprache", oder wie man das auch immer nennen mag, mit logischen Operatoren aufzumotzen.
Ein Beispiel:
Jeder, dieser Konditionen (USER, GROUP, IP,...) muss geparst werden. Beispiel:
Das Funktioniert bei der Version ohne die Logischen Operatoren auch sehr gut. Aber wie kann ich das ganze jetzt so realisieren, dass er die Klammern und Steuerzeichen wie || und && mit beachtet?
Hinweis: Das ganze wird Zeilenweise geparst (foreach(.. as $line)
Meine Ideen dazu waren:
Entweder man ersetzt die Konditionen USER:user1, user2... direkt durch den Check-Code (if (preg_match("@USER.*)@", $line, $sp)) {...) und baut das ganze dann irgendwie mit Assert() zusammen und evalt es.. was ich aber irgendwie nicht hinbekommen habe.
Anderer Versuch: Direkt checken, die konditionen durch true bzw false ersetzen und dann mit eval prüfen.. Da bin ich grad nochma dabei was zu versuchen.. Denk aber mal, das geht schief.
Hat jemand also sonst noch irgendwelche produktiven Ideen dazu?
Grüße,
Fabian
Ein Beispiel:
Code:
(USER: admin2, demouser2 || (GROUP: administrator2 && IP:192.168.1.1)) #require rank: administrator2 !IP: 255.255.255.2552 HOST: demohost.tld
PHP-Code:
if (preg_match("@USER:(.*)@", $line, $sp)) {
$users = explode(", ", trim($sp[1]));
if (in_array($this->getUserData("username"), $users)) {
return true; // BZW diese kondition erfüllt
}
}
Hinweis: Das ganze wird Zeilenweise geparst (foreach(.. as $line)
Meine Ideen dazu waren:
Entweder man ersetzt die Konditionen USER:user1, user2... direkt durch den Check-Code (if (preg_match("@USER.*)@", $line, $sp)) {...) und baut das ganze dann irgendwie mit Assert() zusammen und evalt es.. was ich aber irgendwie nicht hinbekommen habe.
Anderer Versuch: Direkt checken, die konditionen durch true bzw false ersetzen und dann mit eval prüfen.. Da bin ich grad nochma dabei was zu versuchen.. Denk aber mal, das geht schief.
Hat jemand also sonst noch irgendwelche produktiven Ideen dazu?
Grüße,
Fabian
Kommentar