Difference between revisions of "Extension:IsAllowedHook.php"

From Organic Design wiki
(that works - eeezeee!)
m
Line 16: Line 16:
 
);
 
);
  
 +
# This is the earliest hook I can find after which $wgUser is an instance of the User class
 
$wgHooks['userCan'][] = 'wfSetupIsAllowed';
 
$wgHooks['userCan'][] = 'wfSetupIsAllowed';
 
function wfSetupIsAllowed() {
 
function wfSetupIsAllowed() {
global $wgUser;
+
 
 +
# Return unless first call
 
static $first = 0;   
 
static $first = 0;   
 
if ($first++) return true;
 
if ($first++) return true;
 +
global $wgUser;
  
 
# Create a new User class ($User2) by extending the existing one with an overridden isAllowed method
 
# Create a new User class ($User2) by extending the existing one with an overridden isAllowed method

Revision as of 02:28, 9 October 2007

<?php

  1. Extension:IsAllowedHookTemplate:Php
Info.svg These are the MediaWiki extensions we're using and/or developing. Please refer to the information on the mediawiki.org wiki for installation and usage details. Extensions here which have no corresponding mediawiki article are either not ready for use or have been superseded. You can also browse our extension code in our local Subversion repository or our GitHub mirror.
  1. - Started: 2007-10-09
  2. - Licenced under LGPL (http://www.gnu.org/copyleft/lesser.html)

if (!defined('MEDIAWIKI')) die('Not an entry point.');

define('ISALLOWED_VERSION','0.0.0, 2007-10-09');

$wgExtensionCredits['parserhook'][] = array( 'name' => "IsAllowedHook", 'author' => 'User:Nad', 'description' => 'Adds a new hook called "IsAllowed" which is called from the User::isAllowed method.', 'url' => 'http://www.organicdesign.co.nz/Extension:IsAllowedHook.php', 'version' => ISALLOWED_VERSION );

  1. This is the earliest hook I can find after which $wgUser is an instance of the User class

$wgHooks['userCan'][] = 'wfSetupIsAllowed'; function wfSetupIsAllowed() {

# Return unless first call static $first = 0; if ($first++) return true; global $wgUser;

# Create a new User class ($User2) by extending the existing one with an overridden isAllowed method $User = get_class($wgUser); $User2 = $User.'2'; eval("class $User2 extends $User".' { function isAllowed($action = "") { $result = NULL; wfRunHooks("IsAllowed",array(&$this,$action,&$result)); return $result === NULL ? $result = parent::isAllowed($action) : $result; } }');

# Replace the $wgUser object with an identical $User2 instance $oldUser = $wgUser; $wgUser = new $User2(); foreach(array_keys(get_class_vars($User)) as $k) $wgUser->$k = $oldUser->$k;

return true; }

?>