diff options
author | Bryan Tong Minh <btongminh@users.mediawiki.org> | 2011-07-16 16:09:00 +0000 |
---|---|---|
committer | Bryan Tong Minh <btongminh@users.mediawiki.org> | 2011-07-16 16:09:00 +0000 |
commit | 1fb5d73612b8137641bf3229c9a873323193cf97 (patch) | |
tree | 9dff54c11d1482e5dbdfa3ee0134291cc05c1acd /tests/phpunit/includes/UserTest.php | |
parent | 572328180cb42f4fafb9b0400bcec58ee151721a (diff) | |
download | mediawikicore-1fb5d73612b8137641bf3229c9a873323193cf97.tar.gz mediawikicore-1fb5d73612b8137641bf3229c9a873323193cf97.zip |
First steps for bug 14801: add backend support for per-namespace permissions to core. This extends $wgGroupPermissions syntax from $wgGroupPermissions[$group][$right] = bool to $wgGroupPermissions[$group][$right] = array( NS_X => bool ). This is safely backwards compatible; the booleans are still fully supported, and any unset namespace will default to false.
* User::getRights(), User::isAllowed() and User::getGroupPermissions now optionally accept a namespace parameter. If not set, it will check whether the user has the right for all namespaces.
* Anything that uses Title::getUserPermissionsErrorsInternal() automatically supports per-namespace permissions. This includes Title::getUserPermissionsErrors and Title::(quick)UserCan.
* Fix tests that set User::mRights
The next step would be to change all User::isAllowed() to Title::quickUserCan or pass the namespace to User::isAllowed().
Notes
Notes:
http://mediawiki.org/wiki/Special:Code/MediaWiki/92364
Diffstat (limited to 'tests/phpunit/includes/UserTest.php')
-rw-r--r-- | tests/phpunit/includes/UserTest.php | 108 |
1 files changed, 107 insertions, 1 deletions
diff --git a/tests/phpunit/includes/UserTest.php b/tests/phpunit/includes/UserTest.php index df91aca897ad..6fa730ebea50 100644 --- a/tests/phpunit/includes/UserTest.php +++ b/tests/phpunit/includes/UserTest.php @@ -1,7 +1,11 @@ <?php +define( 'NS_UNITTEST', 5600 ); +define( 'NS_UNITTEST_TALK', 5601 ); + class UserTest extends MediaWikiTestCase { protected $savedGroupPermissions, $savedRevokedPermissions; + protected $user; public function setUp() { parent::setUp(); @@ -10,24 +14,40 @@ class UserTest extends MediaWikiTestCase { $this->savedRevokedPermissions = $GLOBALS['wgRevokePermissions']; $this->setUpPermissionGlobals(); + $this->setUpUser(); } private function setUpPermissionGlobals() { global $wgGroupPermissions, $wgRevokePermissions; + # Data for regular $wgGroupPermissions test $wgGroupPermissions['unittesters'] = array( + 'test' => true, 'runtest' => true, 'writetest' => false, 'nukeworld' => false, ); $wgGroupPermissions['testwriters'] = array( + 'test' => true, 'writetest' => true, 'modifytest' => true, ); - + # Data for regular $wgRevokePermissions test $wgRevokePermissions['formertesters'] = array( 'runtest' => true, ); + + # Data for namespace based $wgGroupPermissions test + $wgGroupPermissions['unittesters']['writedocumentation'] = array( + NS_MAIN => false, NS_UNITTEST => true, + ); + $wgGroupPermissions['testwriters']['writedocumentation'] = true; + + } + private function setUpUser() { + $this->user = new User; + $this->user->addGroup( 'unittesters' ); } + public function tearDown() { parent::tearDown(); @@ -55,4 +75,90 @@ class UserTest extends MediaWikiTestCase { $this->assertNotContains( 'modifytest', $rights ); $this->assertNotContains( 'nukeworld', $rights ); } + + public function testNamespaceGroupPermissions() { + $rights = User::getGroupPermissions( array( 'unittesters' ) ); + $this->assertNotContains( 'writedocumentation', $rights ); + + $rights = User::getGroupPermissions( array( 'unittesters' ) , NS_MAIN ); + $this->assertNotContains( 'writedocumentation', $rights ); + $this->assertNotContains( 'modifytest', $rights ); + + $rights = User::getGroupPermissions( array( 'unittesters' ), NS_HELP ); + $this->assertNotContains( 'writedocumentation', $rights ); + $this->assertNotContains( 'modifytest', $rights ); + + $rights = User::getGroupPermissions( array( 'unittesters' ), NS_UNITTEST ); + $this->assertContains( 'writedocumentation', $rights ); + + $rights = User::getGroupPermissions( + array( 'unittesters', 'testwriters' ), NS_MAIN ); + $this->assertContains( 'writedocumentation', $rights ); + } + + public function testUserPermissions() { + $rights = $this->user->getRights(); + $this->assertContains( 'runtest', $rights ); + $this->assertNotContains( 'writetest', $rights ); + $this->assertNotContains( 'modifytest', $rights ); + $this->assertNotContains( 'nukeworld', $rights ); + $this->assertNotContains( 'writedocumentation', $rights ); + + $rights = $this->user->getRights( NS_MAIN ); + $this->assertNotContains( 'writedocumentation', $rights ); + $this->assertNotContains( 'modifytest', $rights ); + + $rights = $this->user->getRights( NS_HELP ); + $this->assertNotContains( 'writedocumentation', $rights ); + $this->assertNotContains( 'modifytest', $rights ); + + $rights = $this->user->getRights( NS_UNITTEST ); + $this->assertContains( 'writedocumentation', $rights ); + } + + /** + * @dataProvider provideGetGroupsWithPermission + */ + public function testGetGroupsWithPermission( $expected, $right, $ns ) { + $result = User::getGroupsWithPermission( $right, $ns ); + sort( $result ); + sort( $expected ); + + $this->assertEquals( $expected, $result, "Groups with permission $right" . + ( is_null( $ns ) ? '' : "in namespace $ns" ) ); + } + public function provideGetGroupsWithPermission() { + return array( + array( + array( 'unittesters', 'testwriters' ), + 'test', + null + ), + array( + array( 'unittesters' ), + 'runtest', + null + ), + array( + array( 'testwriters' ), + 'writetest', + null + ), + array( + array( 'testwriters' ), + 'modifytest', + null + ), + array( + array( 'testwriters' ), + 'writedocumentation', + NS_MAIN + ), + array( + array( 'unittesters', 'testwriters' ), + 'writedocumentation', + NS_UNITTEST + ), + ); + } }
\ No newline at end of file |