[Mediawiki-l] Account creation priviledge

Andrew Johnson anj at aps.anl.gov
Wed Aug 24 22:30:09 UTC 2005


I currently manage two public instances of MediaWiki in a scientific 
community. I can't allow just anybody to create an account or edit pages 
on either of them, but I don't want to have to do all of the account 
creation myself.  I am sufficiently trusting of my users that I think it 
reasonable for any registered user to be allowed to create new users, 
and I can see this as being a fairly common requirement for a semi-open 
community.  To implement this I enclose a simple patch, which I'd like 
to see folded into the MediaWiki distribution, or something equivalent.

I have basically extended the $wgWhitelistAccount array to include an 
anonymous option, which now distinguishes a logged in user from someone 
who is only known by their IP address (currently enabling 'user' in the 
$wgWhitelistAccount array means anyone can get an account).  The code to 
implement this is in User::isAllowedToCreateAccount()

The default behaviour after adding this patch is the same as before, and 
most sites that have $wgWhitelistAccount defined in LocalSettings.php 
file should not need to make any changes unless they wish to take 
advantage of the new ability to distinguish between anonymous and 
registered users.

- Andrew
-- 
Podiabombastic: The tendency to shoot oneself in the foot.


--- mediawiki-1.4.8/includes/DefaultSettings.php
+++ mediawiki/includes/DefaultSettings.php
@@ -455,7 +455,7 @@

  $wgWhitelistEdit = false;   # true = user must login to edit.
  $wgWhitelistRead = false;      # Pages anonymous user may see, like: = 
array ( "Main Page", "Special:Userlogin", "Wikipedia:Help");
-$wgWhitelistAccount = array ( 'user' => 1, 'sysop' => 1, 'developer' => 
1 );
+$wgWhitelistAccount = array ( 'anonymous' => 1, 'user' => 1, 'sysop' => 
1, 'developer' => 1 );

  $wgAllowAnonymousMinor = false; # Allow anonymous users to mark 
changes as 'minor'

--- mediawiki-1.4.8/includes/User.php
+++ mediawiki/includes/User.php
@@ -1187,8 +1187,10 @@
                 $allowed = false;

                 if (!$wgWhitelistAccount) { return 1; }; // default 
behaviour
+               $rights = $this->getRights();
+               if ($this->getID() > 0) { $rights[] = 'user'; }
                 foreach ($wgWhitelistAccount as $right => $ok) {
-                       $userHasRight = (!strcmp($right, 'user') || 
in_array($right, $this->getRights()));
+                       $userHasRight = (!strcmp($right, 'anonymous') || 
in_array($right, $rights));
                         $allowed |= ($ok && $userHasRight);
                 }
                 return $allowed;



More information about the MediaWiki-l mailing list