[pmwiki-users-de] CondAuth und if auth

Sebastian Schneider sesc at unibw.de
Mi Jun 17 02:21:19 CDT 2009



Michael Engelke schrieb:
> Sebastian Schneider schrieb:
>   
>> danke für Deine Mail. Deine Implementierung läuft bei mir bis auf eine
>> kleine Ausnahme ohne Probleme:
>>   
>>     
>
> Ganz Tidy ist die Funktion auch nicht. Bei <img ...>  fehlt noch der "/"
> am Ende - also: <img ... />
>
>   
Oh, stimmt. Das hatte ich bei mir auch schon falsch drin.
>> Ich frage mich allerdings, warum Du das mit dem * gelöst hast? Kann man
>> das nicht einfach so machen, dass jeder Link automatisch geprüft wird?
>>   
>>     
>
> Das geht, aber dazu muss man jeden Aufruf in der stdmarkup.php abfangen
> und durch einen eigenen ersetzen!
> Für mich war die *-Methode einfacher - Okay - ich war nur zu faul dazu...
>
>   
>> Hat das Nachteile?
>>   
>>     
>
> Wenn man mist baut, geht nichts mehr... (In den letzten 2 Minuten habe
> ich mein komplettes Test-Wiki lahm gelegt...)
>   
Ich hab's auch versucht und bin auch direkt gescheitert ;-)
>   
>> @all: Falls mir noch jemand das Problem mit CondAuth erklären kann, wäre
>> ich sehr dankbar.
>>   
>>     
>
> Ich habe mir mal kurz den Quellcode dazu angesehen:
>
> function CondAuth($pagename, $condparm) {
>   @list($level, $pn) = explode(' ', $condparm, 2);
>   $pn = ($pn > '') ? MakePageName($pagename, $pn) : $pagename;
>   return (boolean)RetrieveAuthPage($pn, $level, false, READPAGE_CURRENT);
> }
>
> Also den ersten Parameter $pagename solltest Du mit der Default-Seite
> ersetzen also z.B. "$DefaultGroup.$DefaultName" UND die Angabe MUSS
> korrekt sein!
> der zweite wird hier interessanter: Es wird nach einer Levelangabe und
> der Ziel-Seite verlangt getrennt durch ein Leerzeichen.
> Die Variable $pn wird dann mit $pagename vervollständigt also kürzel wie
> "Group/" "Name" werden in "Group.Name" ersetzt und das wird an
> RetrieveAuthPage übergeben.
>
> Der Testaufruf sieht wie folgt aus:
> echo (CondAuth("$DefaultGroup.$DefaultName","read Target.Page")) ?
> "true" : "false";
>
> das selbe würde auch mit RetrieveAuthPage gehen:
> echo
> ((boolean)RetrieveAuthPage(MakePageName("$DefaultGroup.$DefaultName",
> "Target.Page"), "read", false, READPAGE_CURRENT)) ? "true" : "false";
>
>   
Oliver Betz hat mich darauf gebracht, dass ich mir das $target (in
Deinem Code hier also $pagename) mal anschaue.
Wenn ich die Seite hart einprogrammiere, dann geht es. Wahrscheinlich
stimmt was mit meinem regulären Ausdruck nicht.
> MfG Michael Engelke
>
>   
Ich habe noch ein kleines Problem in Deiner Lösung gefunden. Und zwar
werden Links, wie

[[ LockedPage |* Gesperrte Seite ]]

immer auf "Main.LockedPage", auch wenn der Link in einer anderen Gruppe
gesetzt wurde?
War das jetzt verständlich?

Ich probier's nochmal anders:
Angenommen man hat eine Gruppe Test mit der Standard-Seite Test.Test und
einer weiteren, zum lesen geschützten Seite Test.LockedPage.

Wenn ich jetzt in der Seite Test.Test einen Link setze;
[[ LockedPage |* Gesperrte Seite ]]
dann wird daraus ein Link auf Main.LockedPage.

Mir scheint, als wäre der Aufruf

MakePagename("$GLOBALS[DefaultGroup].$GLOBALS[DefaultName]",$link);

dafür verantwortlich, weil

$GLOBALS[DefaultGroup]

ja auch "Main" ist. Gibt es ne Chance, dass relative Links auch
funktionieren?

Gruss, Sebastian