07 jul 2016

Portal Liferay 6.2 CE GA2 – Permissões nas estruturas ao adicionar um conteúdo.

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

 

 

 

Leave a Comment