É interessante negar acesso a edição de um conteúdo web aprovado.
Um dos motivos é que caso esse conteúdo for modificado e já estiver aprovado, ele não muda o seu status e continua sendo exibido nas listagens de conteúdo e também não informa ao usuário responsável pela aprovação de conteúdos que foi modificado.
A listagem de conteúdos pode ser acessada pelo menu Painel de Controle -> Conteúdo Web. Essa listagem contem todos os conteúdos que o usuário ativo tem permissão de visualização.
O arquivo que cuida da exibição dos botões de ação sobre cada conteúdo é o {amb_extensao}/docroot/html/portlet/journal/article_action.jsp.
Uma melhor abordagem de como editar esse artigo pode ser encontrada nesse outro artigo que fizemos: http://www.weblibre.com.br/alterar-a-listagem-dos-conteudos-no-liferay/
Para retirar o botão de Edição de conteúdos que estão aprovados fizemos a seguinte modificação nesse arquivo:
Na linha #47, quando ele começa os testes sobre o botão editar, insira o seguinte código:
boolean editTest = false;
if (article.isApproved()){
if (isAdmin||isAprovador){
editTest = JournalArticlePermission.contains(permissionChecker, article, ActionKeys.UPDATE);
}
}
else {
editTest = JournalArticlePermission.contains(permissionChecker, article, ActionKeys.UPDATE);
}
Isso fará com que o artigo faça o teste antes de liberar o botão de edição.
Mas como esse não é o único modo de bloquear esse tipo de modificação, devemos também testar se o botão Salvar pode estar disponível na página de edição do artigo, para tanto fizemos a seguinte modificação no arquivo: {amb_extensao}/docroot/html/portlet/journal/edit_article.jsp:
No momento em que o jps testa se o usuário tem permissão para poder salvar o arquivo, por volta da linha # 1044, modifique o teste por esse a seguir:
boolean hasSavePermission = false;
if (article != null) {
boolean isOwner = false;
if (Long.valueOf(request.getRemoteUser()) == article.getUserId())
isOwner = true;
boolean isAdmin = false;
if (request.isUserInRole("Administrator"))
isAdmin = true;
boolean isAprovador = false;
if (request.isUserInRole("NomeDoPapelDoAprovador")&&
(JournalArticlePermission.contains(permissionChecker, article, ActionKeys.VIEW)))
isAprovador = true;
if (article.isApproved()){
if (isAdmin||isAprovador){
hasSavePermission = JournalArticlePermission.contains(permissionChecker, groupId, articleId, ActionKeys.UPDATE);
}
}else {
hasSavePermission = JournalArticlePermission.contains(permissionChecker, groupId, articleId, ActionKeys.UPDATE);
}
}
else {
hasSavePermission = JournalPermission.contains(permissionChecker, scopeGroupId, ActionKeys.ADD_ARTICLE);
}
Com essas duas modificações, conseguimos ter a certeza que o usuário apenas editará arquivos não aprovados.