Hoje gostaria de compartilhar um problema que enfrentei na inserção de conteúdo no Portal Liferay, permissões para estruturas ao inserir um conteúdo.

Visão do cenário:

Um portal com 638 formulários, consequentemente, uma lista enorme com todos os formulários no botão de adicionar conteúdo e a necessidade de apresentar as estruturas para inserção de acordo com as permissões concedidas ao publicador. O que fazer? Um simples HOOK resolveu meu problema.

Exemplificando de uma forma não tão técnica:

Tenho as estruturas A, B e C, e os papéis P1, P2.

Sem a implementação desse HOOK, não importa quais permissões os papeis tenham para as estruturas, se o papel possuir acesso para inserir conteúdo, todas as estruturas serão apresentadas como opção de inserção.

Sem a implementação:

  • P1: Visualiza as estruturas A, B e C, no adicionar conteúdo.
  • P2: Visualiza as estruturas A, B e C, no adicionar conteúdo.

Com a implentação desse HOOK, ganhamos a possibilidade de definir quais estruturas serão apresentadas para os papéis, definindo que o papel P1 tem permissão de View para as estruturas A, B e C, e que o papel P2 tem permissão de View para a estrutura C, com isso teríamos o seguinte cenário na inserção de conteúdo.

Com a implementação:

  • P1: Visualiza as estruturas A, B e C, no adicionar conteúdo.
  • P2: Visualiza a estruturas C, no adicionar conteúdo somente.

Resolvendo o problema:

  • Realizei o HOOK do seguinte arquivo: html/portlet/journal/add_button.jsp , inserindo uma verificação de permissão:

<%
for (DDMStructure ddmStructure : ddmStructures) {

if(DDMStructurePermission.contains(themeDisplay.getPermissionChecker(), ddmStructure ,ActionKeys.VIEW)){

%>

<liferay-portlet:renderURL var=”addArticleURL” windowState=”<%= LiferayWindowState.MAXIMIZED.toString() %>”>
<portlet:param name=”struts_action” value=”/journal/edit_article” />
<portlet:param name=”redirect” value=”<%= currentURL %>” />
<portlet:param name=”groupId” value=”<%= String.valueOf(scopeGroupId) %>” />
<portlet:param name=”folderId” value=”<%= String.valueOf(folderId) %>” />
<portlet:param name=”structureId” value=”<%= ddmStructure.getStructureKey() %>” />
</liferay-portlet:renderURL>

<aui:nav-item href=”<%= addArticleURL %>” label=”<%= HtmlUtil.escape(ddmStructure.getName(themeDisplay.getLocale())) %>” />

<%
}
}
%>

 

Com o método DDMStructurePermission.contains(), realizo a verificação da permissão desejada para a estrutura referenciada, passando as permissões definidas ao usuário, a estrutura em questão e a permissão desejada, neste exemplo VIEW.

  • Após a finalização do HOOK, defino as permissões nas estruturas de quais papeis terão acesso de VIEW.

Com estas implementações sua inserção de conteúdo passará à respeitar as permissões definidas.

CTA-ebook-transformação-digital