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:
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:
Resolvendo o problema:
<%
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.
Com estas implementações sua inserção de conteúdo passará à respeitar as permissões definidas.