Em alguns casos, no uso da ferramenta Wiki, pode ser necessário restringir o acesso ao conteúdo apenas a usuários registrados.

Uma das mais proeminentes ferramentas de wiki é o MediaWiki, usado na Wikipedia. Mas volta e meia é preciso um pouco mais que a interface web para resolver alguns problemas comuns.

Em outro artigo, compartilhei como configurar URLs amigáveis no mediawiki.

Agora, como podemos restringir o acesso apenas a usuários registrados?

1 - Edite o arquivo de configuração do MediaWiki - LocalSettings.php adicionando as seguites opções ao final do arquivo:
```php # Permitir o acesso a determinados conteúdos $wgWhitelistRead = array( "P%C3%A1gina_principal", "Especial:Userlogin", "-", "MediaWiki:Monobook.css" );

Restringindo o resto

$wgGroupPermissions[’’][‘read’] = false; $wgGroupPermissions[’’][’edit’] = false;

Restringindo o registro de novos usuários

mude para true para permitir novos registros

$wgGroupPermissions[’*’][‘createaccount’] = false;

</dd>

<dt>2 - Caso queria permitir que os usuários atuais convidem outras pessoas, adicione também:</dt>
<dd>
```php
#Permite que usuarios conhecidos criem contas
$wgGroupPermissions['user']['createaccount'] = true;

Update (04/12/2009) : caso queira que apenas administradores possam criar usuários, use a seguinte opção no lugar da citada acima:

#Permite que usuarios conhecidos criem contas
$wgGroupPermissions['sysop']['createaccount'] = true;

Outro grupo válido para esta configuração é ‘bureaucrat’ , que inclui os usuários no grupo Burocratas.

Mais informações (em inglês) : http://www.mediawiki.org/wiki/Manual:$wgGroupPermissions

3 - Melhorando o texto da página de autenticação
Apesar de estar tudo funcionando bem a esta altura, uma coisa ainda pode incomodar. A mensagem da tela de acesso negado pode ser um pouco confusa e feia.

O título da página é “Erro” e a mensagem é “Autenticação Requisitada”

Para deixar isso mais bonito, acesse a página de edição das mensagens do MediaWiki, via web mesmo, no endereço Especial:Todas_as_mensagens do seu wiki. As mensagens que procuramos aqui são: loginreqlink, loginreqpagetext e loginreqtitle

Mas o problema é: o título da página (na janela do browser) continua sendo “Erro”, e esta mensagem é a mesma usada em outros erros. Então, para mudar isso precisamos dar uma pequena “mexidinha” no código do mediawiki. Nada demais, apenas mudar a chamada da mensagem errorpagetitle para loginreqtitle.

Encontramos essa chamada no arquivo include/OutputPage.php, lá pela linha 978:

$this->setPageTitle( wfMsg( 'loginreqtitle' ) );
  $this->setHTMLTitle( wfMsg( 'errorpagetitle' ) );

e mudamos para

$this->setPageTitle( wfMsg( 'loginreqtitle' ) );
  $this->setHTMLTitle( wfMsg( 'loginreqtitle' ) );

e pronto!