Current File : /home/jvzmxxx/wiki1/extensions/Wikibase/repo/tests/phpunit/includes/PermissionsHelper.php
<?php

namespace Wikibase\Test;

/**
 * @license GPL-2.0+
 * @author Daniel Kinzler
 * @author Addshore
 */
class PermissionsHelper {

	/**
	 * Utility function for applying a set of permissions to $wgGroupPermissions.
	 * Automatically resets the rights cache for $wgUser.
	 * This modifies the global $wgGroupPermissions and $wgUser variables.
	 * No measures are taken to restore the original permissions later, this is up to the caller.
	 *
	 * @param array[]|null $permissions
	 * @param string[]|null $groups groups to apply to $wgUser. If not given, group
	 * membership is not modified.
	 *
	 * @todo: try to do this without messing with the globals, or at least without hardcoding them.
	 */
	public static function applyPermissions( array $permissions = null, array $groups = null ) {
		global $wgGroupPermissions;
		global $wgUser;

		if ( !$permissions ) {
			return;
		}

		if ( is_array( $groups ) ) {
			$oldGroups = $wgUser->getGroups();
			foreach ( $oldGroups as $group ) {
				$wgUser->removeGroup( $group );
			}

			foreach ( $groups as $group ) {
				$wgUser->addGroup( $group );
			}
		}

		foreach ( $permissions as $group => $rights ) {
			if ( !empty( $wgGroupPermissions[ $group ] ) ) {
				$wgGroupPermissions[ $group ] = array_merge( $wgGroupPermissions[ $group ], $rights );
			} else {
				$wgGroupPermissions[ $group ] = $rights;
			}
		}

		// reset rights cache
		$wgUser->addGroup( "dummy" );
		$wgUser->removeGroup( "dummy" );
	}

}