[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