actor = $actor; $this->permissions = array_fill_keys( $permissions, true ); } /** * The user identity associated with this authority. * * @return UserIdentity */ public function getUser(): UserIdentity { return $this->actor; } /** * @param int $freshness * * @return ?Block always null * @since 1.37 */ public function getBlock( int $freshness = self::READ_NORMAL ): ?Block { return null; } /** * @inheritDoc * * @param string $permission * * @return bool */ public function isAllowed( string $permission ): bool { return isset( $this->permissions[ $permission ] ); } /** * @inheritDoc * * @param string ...$permissions * * @return bool */ public function isAllowedAny( ...$permissions ): bool { if ( !$permissions ) { throw new InvalidArgumentException( 'At least one permission must be specified' ); } foreach ( $permissions as $perm ) { if ( $this->isAllowed( $perm ) ) { return true; } } return false; } /** * @inheritDoc * * @param string ...$permissions * * @return bool */ public function isAllowedAll( ...$permissions ): bool { if ( !$permissions ) { throw new InvalidArgumentException( 'At least one permission must be specified' ); } foreach ( $permissions as $perm ) { if ( !$this->isAllowed( $perm ) ) { return false; } } return true; } private function checkPermission( string $permission, ?PermissionStatus $status ): bool { $ok = $this->isAllowed( $permission ); if ( !$ok && $status ) { // TODO: use a message that at includes the permission name $status->fatal( 'permissionserrors' ); } return $ok; } /** * @inheritDoc * * @param string $action * @param PageIdentity $target * @param PermissionStatus|null $status * * @return bool */ public function probablyCan( string $action, PageIdentity $target, PermissionStatus $status = null ): bool { return $this->checkPermission( $action, $status ); } /** * @inheritDoc * * @param string $action * @param PageIdentity $target * @param PermissionStatus|null $status * * @return bool */ public function definitelyCan( string $action, PageIdentity $target, PermissionStatus $status = null ): bool { return $this->checkPermission( $action, $status ); } /** * @inheritDoc * * @param string $action * @param PageIdentity $target * @param PermissionStatus|null $status * * @return bool */ public function authorizeRead( string $action, PageIdentity $target, PermissionStatus $status = null ): bool { return $this->checkPermission( $action, $status ); } /** * @inheritDoc * * @param string $action * @param PageIdentity $target * @param PermissionStatus|null $status * * @return bool */ public function authorizeWrite( string $action, PageIdentity $target, PermissionStatus $status = null ): bool { return $this->checkPermission( $action, $status ); } }