[pmwiki-users] How to determine if a page requires a valid user id or a shared password?

Peter Bowers pbowers at pobox.com
Wed Oct 20 02:10:54 CDT 2010


On Tue, Oct 19, 2010 at 8:13 PM, Lars Grau <mail at larsgrau.de> wrote:
> How can I determine by ConditionalMarkup if the requested page action requires ...
>
> - a) admin rights (and hence render username AND password field) or
> - b) a valid id (and hence render username AND password field) or
> - c) a shared password  (and hence render the password field ONLY)
> - d) a shared password OR a valid id  (and hence render username AND password field)
>
> ... according to the given action (browse/edit/upload/attr) ?
...
> How do I fill the {$RequiredPagePermission} condition ???

It's going to get more complicated before it gets solved...  The
problem is you have to deal with cascading authorization,
authorizations from various sources (page, group, config.php), etc.

I believe you can fill in {$RequiredPagePermission} using code similar
to this in config.php (assuming we completely ignore any passwords
from group and making a bunch of other assumptions):

===(snip - untested)===
$FmtPV['$RequiredPagePermission'] =
'GetRequiredPagePermission($pagename, $page)';
function GetRequiredPagePermission($pagename, $page)
{
   global $action;
   if ($action == 'edit') $tmppass = $page['passwdedit'];
   else $tmppass = $page['passwdread'];  // ignoring other actions for
simplicity - may not suffice
   if (!$tmppass) {
      if ($action == 'edit')
         $tmppass = $DefaultPasswords['edit'];
      else
         $tmppass = $DefaultPasswords['read']; // again, ignoring other actions
   }
   if (!$tmppass || strpos($tmppass, '@nopass') !== FALSE) return '';
// blank if no password
   elseif (strpos($tmppass, 'id:*') !== FALSE)
      return 'id:*';
   elseif (strpos($tmppass, 'id:') !== FALSE)
      return 'id';
   elseif (strpos($tmppass, '@lock') !== FALSE || strpos($tmppass,
'@_site_admin') !== FALSE)
      return 'admin';
   else
      return 'passwd';
}
===(snip)===

The more I look at it the less it seems to work in the "real world"
without a lot more coding to deal with other issues, but maybe it'll
get you started in the right direction?  Also I'm not sure if $page is
going to be available...?

You might also look at http://www.pmwiki.org/wiki/Cookbook/OpenPass to
see some related types of actions there...

Hope that helps.

-Peter



More information about the pmwiki-users mailing list