[pmwiki-users-de] CondAuth und if auth

Sebastian Schneider sesc at unibw.de
Mi Jun 17 04:19:23 CDT 2009


Ich habe es nochmal ein wenig aufgebohrt:

1) Ich habe den Namen des Markups von [[|tt aif [[|lock geändert, da der
vorige schon vom Tooltip-Markup verwendet wird.
2) Es funktionieren jetzt auch Links mit einer Action zusammen (z.B. [[
TestLocked?action=edit |* + ]])
     Vorher wurde der Teil ab dem ? einfach abgeschnitten.
3) Falls eine action in der obigen Art angegeben ist, wird von CondAuth
nicht wie vorher auf 'read' geprüft, sondern auf die Aktion (in diesem
Fall 'edit').
4) Das Icon ist jetzt nicht mehr Teil des Links, sondern wird hinten
angestellt.
5) Weil ich heute so gute Laune habe, hänge ich  mein selbstgemachtes
Schloss-Symbol mal an. Wer möchte, kann es gerne benutzen.

Hier mal der Code:


Markup('[[|lock','<[[|',
  "/(?>\\[\\[([^|\\]]+)\\|\\s*)\\*\\s*(.*?)\\s*\\]\\]($SuffixPattern)/e",
  "makeLockedLink(\$pagename,PSS('$1'),PSS('$2'),'$3')");


function makeLockedLink($pagename, $target, $txt, $suffix) {
  $txt = trim( $txt );
  $page = MakePageName( $pagename, trim( $target ) );
 
  if ( preg_match( '/.*(\?.*)/i', $target, $targetsuffix ) )
    $targetsuffix = $targetsuffix[ 1 ];
  else
    $targetsuffix = '';

  if ( $targetsuffix && preg_match( '/.*\=(.*)/i', $targetsuffix,
$targetaction ) )
    $targetaction = $targetaction[ 1 ];
  else
    $targetaction = 'read';
 
  if ( $txt == '' )
    $txt = (preg_match('/[.\/]/',$target)) ? $page : $target;
  elseif ( $txt == "+" )
    $txt = PageVar($page,'$Title');

  if ( CondAuth( $page, trim( $targetaction ) ) )
    return Keep( MakeLink($pagename, PSS( $page.$targetsuffix ), PSS(
$txt ), $suffix), 'L' );
  else
    return Keep( MakeLink($pagename, PSS( $page.$targetsuffix ), PSS(
$txt ), $suffix)."&nbsp;<img
src='$GLOBALS[PubDirUrl]/icons/lock.png'/>", 'L' );
}


Ich habe außerdem ein paar Dinge ausprobiert, um den * weglassen zu
können. Bin allerdings jedesmal gescheitert. Hat da vielleicht noch
jemand eine Idee?

Gruss,
Sebastian



Sebastian Schneider schrieb:
> So, ich habe die Tipps von Michael und Oliver mal vereint:
>
> Markup('[[|tt','<[[|',
>   "/(?>\\[\\[([^|\\]]+)\\|\\s*)\\*\\s*(.*?)\\s*\\]\\]($SuffixPattern)/e",
>   "makeLockedLink(\$pagename,PSS('$1'),PSS('$2'),'$4')");
>
> function makeLockedLink($pagename, $target, $txt, $suffix) {
>   $txt = trim( $txt );
>   $page = MakePageName( $pagename, trim( $target ) );
>
>   if ( $txt == '' )
>     $txt = (preg_match('/[.\/]/',$target)) ? $page : $target;
>   elseif ( $txt == "+" )
>     $txt = PageVar($page,'$Title');
>
>   if ( CondAuth( $page, 'read' ) )
>     return Keep( MakeLink($pagename, $page, $txt, $suffix), 'L' );
>   else
>     return Keep( MakeLink($pagename, $page, $txt, "&nbsp;<img
> src='$GLOBALS[PubDirUrl]/icons/lock.png'/>".$suffix), 'L' );
> }
>
> Jetzt klappt es auch mit CondAuth (es hatte sich ein Leerfeld nach dem
> $target eingeschlichen), und es funktionieren jetzt auch Verweise zu
> Seiten der gleichen Gruppe, ohne dass der Gruppenname angegeben werden muss.
>
> Als nächstes schaue ich mal, ob ich den * noch loswerden kann.
>
> Danke schonmal an alle,
>
> Sebastian
>
> Sebastian Schneider schrieb:
>   
>> Hallo Oliver,
>>
>> Es hat wohl wirklich was mit dem $target zu tun. Eigentlich hole ich es
>> mir aus dem Markup-Aufruf mittels regulären Ausdrucks. Wenn ich es mir
>> ausgebe, dann stimmt das auch.
>>
>> Ich habe jetzt aber mal das $target hart reinprogrammiert für eine
>> geschützte Seite und siehe da: Es geht!
>>
>> Es scheint, als müsse ich meinen regulären Ausdruck nochmal genauer
>> analysieren.
>>
>> Danke schonmal,
>>
>> Sebastian
>>
>>
>>
>> Oliver Betz schrieb:
>>   
>>     
>>> Sebastian Schneider schrieb:
>>>
>>>   
>>>     
>>>       
>>>> Ich schreibe gerade ein "Rezept", welches -ähnlich wie das
>>>> ExternalLinks-Rezept hinter einem Link ein kleines Schloss-Symbol
>>>> anzeigt, wenn die Seite zum Lesen durch ein Passwort geschützt ist.
>>>>
>>>> Dazu habe ich folgende Methode:
>>>>
>>>> function makeLockedLink($pagename, $target, $txt, $suffix) {
>>>>   global $PubDirUrl;
>>>>
>>>>   if ( CondAuth( $target, 'read' )  )
>>>>     return MakeLink($pagename, $target, $txt,$suffix);
>>>>   else
>>>>     return MakeLink($pagename, $target, $txt,"&nbsp;<img src=".$PubDirUrl."/icons/lock.png>".$suffix);
>>>>
>>>> }
>>>>
>>>> Das Problem bei obiger Methode ist, dass CondAuth immer true
>>>> zurückliefert, unabhängig davon ob ich das Passwort auf der betreffenden
>>>> Seite bereits eingegeben habe.
>>>>     
>>>>       
>>>>         
>>> vielleicht stimmt der Seitenname in $target nicht?
>>>
>>> Bei mir funktioniert CondAuth wie erwartet, aber ich rufe es mit einem
>>> festen Seitennamen auf: "if (! CondAuth('Main.HomePage', 'read'))", um
>>> für Besucher eine "Nicht-Wiki-Darstellung" zu erhalten - die
>>> Besucherseiten haben kein Lesepasswort.
>>>
>>> Woher kommt $target?
>>>
>>> Vielleicht brauchst Du ResolvePageName()?
>>>
>>> Servus
>>>
>>> Oliver
>>>
>>>
>>> _______________________________________________
>>> pmwiki-users-de mailing list
>>> pmwiki-users-de at pmichaud.com
>>> http://www.pmichaud.com/mailman/listinfo/pmwiki-users-de
>>>   
>>>     
>>>       
>>
>> _______________________________________________
>> pmwiki-users-de mailing list
>> pmwiki-users-de at pmichaud.com
>> http://www.pmichaud.com/mailman/listinfo/pmwiki-users-de
>>   
>>     
>
> _______________________________________________
> pmwiki-users-de mailing list
> pmwiki-users-de at pmichaud.com
> http://www.pmichaud.com/mailman/listinfo/pmwiki-users-de
>   
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : lock.png
Dateityp    : image/png
Dateigröße  : 281 bytes
Beschreibung: nicht verfügbar
URL         : http://www.pmichaud.com/pipermail/pmwiki-users-de/attachments/20090617/f8ff68b0/attachment.png