sábado, 2 de fevereiro de 2008

Mexendo no workflow do Plone

No meu trabalho, a um certo tempo foi solicitada a implantação de uma intranet. Um site interno que o pessoal executivo pudesse classificar as peças produzidas e compartilhar modelos e documentos, entre outras coisas. Daí resolvi instalar o plone para resolver este problema.

Acontece que o plone permite, por padrão, que qualquer pessoa - inclusive anônimos - tenham acesso aos conteúdos não privados e não era bem isso que eu queria.

O objetivo desta "receita de bolo" é configurar o plone de modo que todo conteúdo seja privado por padrão, os conteúdos marcados como "compartilhados" ficassem disponíveis para usuários registrados e apenas os conteúdos publicados ficassem disponíveis para o público geral.

Pondo a mão na massa....

A primeira coisa a fazer é adicionar um novo "estado" para o nosso sistema. Usando guia de navegação à esquerda da ZMI, vá para portal_workflow->plone_workflow->states. Adicione um novo estado chamado shared.

Ainda na ZMI, clique sobre o estado que você acabou de criar e adicione as transações "rejeitar" e "retirar".

Vá para a aba Transitions de plone_workflow (usando navegação à esquerda) e adicione uma nova transição chamada share. No formulário de adição de transição, no campo Destination state, escolha o estado shared. No campo Guard, acrescente em Role(s) o perfil "Especial". No campo Name (formatted) insira "Compartilhar".

Volte à lista de Estados e acrescente a transição "Compartilhar" em cada estado que tem atualmente "publish" como uma transição disponível.

Vá para a raiz de seu Plone site, acesse a guia Security, e adicione uma Role chamada "Especial".

Volte para plone_workflow->States->shared, e na aba Permissions, desabilite a aquisição para as permissões "View" e "Access content information", em seguida, dê essas permissões para os papéis Manager, Owner, Reviewer, e Especial.

Na interface Plone, acesse o painel de controle "configuração do site"->"Administração de usuários e grupos". Adicione um grupo chamado "especiais". (Note que o grupo é "Especiais", e a Role no Zope é "Especial").

Volte para a interface ZMI. Acesse acl_users->portal_role_manager e, nesse componente, defina o grupo "Especiais" como sendo portador da Role "Especial".

Vá para a raiz de seu Plonesite e, na aba Secutity, desabilite a aquisição para a permissão "Access contents information" e em seguida atribua essa permissão para "Anonymous". (Nota: esta parece ser a quebrar o padrão de comportamento Plone mostrando o conteúdo de uma pasta, se não há um índice página, mas que pode muito bem ser intencional).

Pronto! Agora todo conteúdo que esteja no estado shared estará visível apenas para os usuários que estejam vinculados ao grupo Especiais.

Para fazer com que todo conteúdo seja privado por padrão é sopa no mel. Na raiz do seu Plonesite, acesse a ferramenta portal_workflow, na aba Contents, selecione o objeto plone_workflow, e na aba States, marque o checkbox referente ao estado private (privado) e clique no botão Set Initial State. Pronto!

Este How-to foi testado usando as seguintes versões:

* Ubuntu 7.10
* Zope 2.9
* Plone 2.5.2

Referências

* www.plone.org
* www.zopemag.com