Combination View Flat View Tree View
Threads [ Previous | Next ]
toggle
Sergio Romero Zayas
Administrar tags Panel de control, con otro rol diferente a administrador.
April 10, 2012 8:43 AM
Answer

Sergio Romero Zayas

Rank: Regular Member

Posts: 115

Join Date: April 14, 2008

Recent Posts

Buenas,

El asunto puede resultar un poco "lío" pero todo lo contrario, es bastante sencillo.

Me he creado un rol nuevo que es ROL_NUEVO, y un grupo de usuarios GRUPO_NUEVO. Todo usuario que entre en el grupo obtendrá el ROL_NUEVO, puesto que así esta automatizado.

Este rol, se le pueden definir permisos. En la zona de añadir permisos tenemos 4 bloques:
- Portal
- Aplicaciones
- Contenidos
- Panel de control

El que me interesa es panel de control.

Si defino que el ROL_NUEVO tiene permisos de por ejemplo: Panel de control > Bookmarks > Todos los permisos y acepto

Si accedo con un usuario que disponga de este rol, al acceder al panel de control me aparecerá la opción de administrar "Bookmarks"

Pues bien. Lo mismo para Tags, no funciona. He probado varias configuraciones, e incluso he llegado a darle todos los permisos no solo en el bloque de Panel de control, sino también en Aplicaciones, Contenidos y Portal y no aparece la posibilidad de administrar Tags.

Creo que es un Bug de Liferay, llevo ya un tiempo investigandolo y estoy ya desarrollando un hook, sobre esta parte de Liferay, no obstante si alguien ha tenido un problema similar porfavor, comparta la información. Gracias.

PD. Uso versión 6.0.6 de Liferay.
Sergio Romero Zayas
RE: Administrar tags Panel de control, con otro rol diferente a administrad
April 11, 2012 3:58 AM
Answer

Sergio Romero Zayas

Rank: Regular Member

Posts: 115

Join Date: April 14, 2008

Recent Posts

Solo puede administrar tags en el panel de control, el usuario con role Community Administrators ó el Community Owner, de tipo community.

No hay posibilidad, aunque se cree un nuevo rol, con todos los permisos de todo, no lo permite.

sigo dandole alguna vuelta más, para ver si realmente es un problema o es que Liferay lo ha definido así.
Sergio Romero Zayas
RE: Administrar tags Panel de control, con otro rol diferente a administrad
April 11, 2012 9:16 AM
Answer

Sergio Romero Zayas

Rank: Regular Member

Posts: 115

Join Date: April 14, 2008

Recent Posts

El trabajo que estoy haciendo para solucionar este problema va ser un ext (al menos esto estoy intentando)

En el resource-actions del portal-impl existen los xml a través de los cuales se gestionan los permisos para los roles.

el portlet 99 (porltet de administración de tag para el panel de control) esta en asset.xml
Observando el siguiente código:
<model-resource>
<model-name>com.liferay.portlet.asset.model.AssetTag</model-name>
<portlet-ref>
<portlet-name>99</portlet-name>
</portlet-ref>
<permissions>
<supports>
<action-key>DELETE</action-key>
<action-key>PERMISSIONS</action-key>
<action-key>UPDATE</action-key>
<action-key>VIEW</action-key>
</supports>
<community-defaults>
<action-key>VIEW</action-key>
</community-defaults>
<guest-defaults>
<action-key>VIEW</action-key>
</guest-defaults>
<guest-unsupported>
<action-key>UPDATE</action-key>
</guest-unsupported>
</permissions>
</model-resource>

Vemos que no soporta el action-key de ACCESS_IN_CONTROL_PANEL por esto no aparece en la definición de permisos del rol.

Aún extendiendo el resource-actions asset.xml, a mi aún no me ha funcionado aún, estoy probando el extender todo aquello que se vaya precisando hasta dar con la tecla.

Si alguién esta en la misma situación y ha optado por otra solución/idea, le agradecería que lo compartiera.
Sergio Romero Zayas
RE: Administrar tags Panel de control, con otro rol diferente a administrad
May 21, 2012 3:12 AM
Answer

Sergio Romero Zayas

Rank: Regular Member

Posts: 115

Join Date: April 14, 2008

Recent Posts

Sigo investigando en este tema para intentar hacer la tarea lo menos invasiva posible.

Veo que a nadie se le ocurre nada al respecto.
Sergio Romero Zayas
RE: Administrar tags Panel de control, con otro rol diferente a administrad
May 22, 2012 3:08 AM
Answer

Sergio Romero Zayas

Rank: Regular Member

Posts: 115

Join Date: April 14, 2008

Recent Posts

forever alone¿?
Julio Camarero
RE: Administrar tags Panel de control, con otro rol diferente a administrad
May 22, 2012 4:31 AM
Answer

Julio Camarero

LIFERAY STAFF

Rank: Liferay Legend

Posts: 1639

Join Date: July 15, 2008

Recent Posts

Hola Sergio,

acabo de probar en la 6.1 (no tengo la 6.0 a mano) y funciona correctamente cuando das el permiso de ACCESS_IN_CONTROL_PANEL

Si en la versión 6.0 no existía, se podría solucionar modificando el fichero resource-actions/asset.xml como indicabas arriba. Lo más probable es que esto no te haya funcionado por algún motivo.... te aparece ahora el checkbox? si no aparece es que no ha funcionado..... el fichero debería llamarse asset-ext.xml y estar en la misma carpeta dentro de tu EXT.

un saludo!
Sergio Romero Zayas
RE: Administrar tags Panel de control, con otro rol diferente a administrad
May 22, 2012 4:50 AM
Answer

Sergio Romero Zayas

Rank: Regular Member

Posts: 115

Join Date: April 14, 2008

Recent Posts

El checkbox me aparece para asignar el permiso, pero nada. Cuando acceso con el usuario X, que tiene el rol creado por mi con este permiso, no aparece en el panel de control la administración de tags.

Estoy con las últimas pruebas. Si consigo darle una solución, lo comparto. El caso es que la 6.1 no pasa porque no se usa el PermissionChecker en el StrutsPortlet.java.
Sergio Romero Zayas
RE: Administrar tags Panel de control, con otro rol diferente a administrad
May 22, 2012 7:44 AM
Answer

Sergio Romero Zayas

Rank: Regular Member

Posts: 115

Join Date: April 14, 2008

Recent Posts

He vuelto a darle una vuelta más, y sigo con el mismo problema.

Detallo a continuación los pasos que he dado para extender el portlet 99, que es de administración de tags.


Extiendo las Jsps
ext/docroot/WEB-INF/ext-web/docroot/html/portlet/ext/asset-ext/
- view
- init
ext/docroot/WEB-INF/ext-web/docroot/html/portlet/ext/asset-ext/js
- main.js
ext/docroot/WEB-INF/ext-web/docroot/html/portlet/ext/asset-ext/css
- main.jsp

Introduzco el mapeo del struts-config-ext.xml
<!-- Asset Tags Admin -->

<action path="/asset-ext/view" forward="portlet.ext.asset_tags_admin.view" />
<!--Fin Asset Tags Admin-->

Igualmente sigo con el tiles-def-ext.xml

<!-- TAGS -->
<!-- Asset Tags Admin -->
<definition name="portlet.ext" extends="portlet" />
<definition name="portlet.ext.administracionTags.view" extends="portlet">
<put name="portlet_content" value="/portlet/ext/asset-ext/view.jsp" />
</definition>
<!-- FIN TAGS -->

Añado su entrada de resource-actions, en default-ext.xml
añado la línea que indica donde está el fichero de definición de permisos
<resource file="resource-actions/tags/asset-ext.xml"/>

el fichero de definición de permisos asset-ext.xml contiene lo siguiente:
<resource-action-mapping>
<model-resource>
<model-name>com.liferay.portlet.asset.model.AssetTag</model-name>
<portlet-ref>
<portlet-name>99</portlet-name>
</portlet-ref>
<permissions>
<supports>
<action-key>ACCESS_IN_CONTROL_PANEL</action-key>
<action-key>DELETE</action-key>
<action-key>PERMISSIONS</action-key>
<action-key>UPDATE</action-key>
<action-key>VIEW</action-key>
</supports>
<community-defaults>
<action-key>VIEW</action-key>
</community-defaults>
<guest-defaults>
<action-key>VIEW</action-key>
</guest-defaults>
<guest-unsupported></guest-unsupported>
</permissions>
</model-resource>
</resource-action-mapping>

Y ya lo último que hice, para intentar de solventar este problema fue traerme el funcionamiento de la clase StrutsPortlet.java de la 6.1 a mi versión 6.05, extiendo la clase StrutsPortletExt y corta pego la de la versión 6.1

Esto es un resumen de lo que he intentado.

Lo que consigo con todo esto es que aparezca la posibilidad de añadir el permiso de "access to control panel" a la hora de asignar permisos a un rol, pero luego no funciona, o no es "real". Accedo con un usuario que tenga mi rol "admin_tags" y no ve la administración de tags. Solo es posible verla con un usuario administrador.


Esta es la historia de un problema/bug que viene de inicio en Liferay 6.0.x y que lleva algún tiempo dejándome sin salida y sin opciones de solución poco dolorosas, puesto que quería solucionar esto desde un inicio sin usar EXT, para no infrigir las reglas no escritas de "buenas prácitcas", pero es imposible hacerlo sin extender el core.

En fin que esto le haya pasado a alguien más, a ver si entre varios tenemos una solución lo menos dolorosa posible. Gracias de antemano!
Sergio Romero Zayas
RE: Administrar tags Panel de control, con otro rol diferente a administrad
May 22, 2012 9:24 AM
Answer

Sergio Romero Zayas

Rank: Regular Member

Posts: 115

Join Date: April 14, 2008

Recent Posts

Solucionado.

Faltaba añadir el mismo portlet-resource 99 al asset-ext.xml además del model-resource.
Con lo que el resource-actions-mappings quedaría así:

<resource-action-mapping>
<portlet-resource>
<portlet-name>99</portlet-name>
<permissions>
<supports>
<action-key>ACCESS_IN_CONTROL_PANEL</action-key>
<action-key>CONFIGURATION</action-key>
<action-key>VIEW</action-key>
</supports>
<community-defaults>
<action-key>VIEW</action-key>
</community-defaults>
<guest-defaults>
<action-key>VIEW</action-key>
</guest-defaults>
<guest-unsupported>
<action-key>ACCESS_IN_CONTROL_PANEL</action-key>
<action-key>CONFIGURATION</action-key>
</guest-unsupported>
</permissions>
</portlet-resource>

<model-resource>
<model-name>com.liferay.portlet.asset.model.AssetTag</model-name>
<portlet-ref>
<portlet-name>99</portlet-name>
</portlet-ref>
<permissions>
<supports>
<action-key>DELETE</action-key>
<action-key>PERMISSIONS</action-key>
<action-key>UPDATE</action-key>
<action-key>VIEW</action-key>
</supports>
<community-defaults>
<action-key>VIEW</action-key>
</community-defaults>
<guest-defaults>
<action-key>VIEW</action-key>
</guest-defaults>
<guest-unsupported></guest-unsupported>
</permissions>
</model-resource>
</resource-action-mapping>


y poner @override en todos los métodos del StrutsPortletExt.


La clase quedaría así:

/**
*
*/
package com.ext.portal.struts;

import com.liferay.portlet.PortletConfigImpl;
import com.liferay.portlet.StrutsPortlet;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.util.Validator;


import com.liferay.portal.struts.PortletRequestProcessor;
import com.liferay.portal.struts.StrutsUtil;
import com.liferay.portal.util.PortalUtil;
import com.liferay.portal.util.WebKeys;

import java.io.IOException;

import java.util.Map;

import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.PortletConfig;
import javax.portlet.PortletException;
import javax.portlet.PortletRequest;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import javax.portlet.ResourceRequest;
import javax.portlet.ResourceResponse;

import javax.servlet.ServletException;



/**
* @author sromeroz
*
*/
public class StrutsPortletExt extends StrutsPortlet {
@Override
public void doAbout(
RenderRequest renderRequest, RenderResponse renderResponse)
throws IOException, PortletException {

renderRequest.setAttribute(WebKeys.PORTLET_STRUTS_ACTION, aboutAction);

include(renderRequest, renderResponse);
}

@Override
public void doConfig(
RenderRequest renderRequest, RenderResponse renderResponse)
throws IOException, PortletException {

renderRequest.setAttribute(WebKeys.PORTLET_STRUTS_ACTION, configAction);

include(renderRequest, renderResponse);
}

@Override
public void doEdit(
RenderRequest renderRequest, RenderResponse renderResponse)
throws IOException, PortletException {

if (renderRequest.getPreferences() == null) {
super.doEdit(renderRequest, renderResponse);
}
else {
renderRequest.setAttribute(
WebKeys.PORTLET_STRUTS_ACTION, editAction);

include(renderRequest, renderResponse);
}
}

@Override
public void doEditDefaults(
RenderRequest renderRequest, RenderResponse renderResponse)
throws IOException, PortletException {

if (renderRequest.getPreferences() == null) {
super.doEdit(renderRequest, renderResponse);
}
else {
renderRequest.setAttribute(
WebKeys.PORTLET_STRUTS_ACTION, editDefaultsAction);

include(renderRequest, renderResponse);
}
}

@Override
public void doEditGuest(
RenderRequest renderRequest, RenderResponse renderResponse)
throws IOException, PortletException {

if (renderRequest.getPreferences() == null) {
super.doEdit(renderRequest, renderResponse);
}
else {
renderRequest.setAttribute(
WebKeys.PORTLET_STRUTS_ACTION, editGuestAction);

include(renderRequest, renderResponse);
}
}

@Override
public void doHelp(
RenderRequest renderRequest, RenderResponse renderResponse)
throws IOException, PortletException {

renderRequest.setAttribute(WebKeys.PORTLET_STRUTS_ACTION, helpAction);

include(renderRequest, renderResponse);
}

@Override
public void doPreview(
RenderRequest renderRequest, RenderResponse renderResponse)
throws IOException, PortletException {

renderRequest.setAttribute(
WebKeys.PORTLET_STRUTS_ACTION, previewAction);

include(renderRequest, renderResponse);
}

@Override
public void doPrint(
RenderRequest renderRequest, RenderResponse renderResponse)
throws IOException, PortletException {

renderRequest.setAttribute(WebKeys.PORTLET_STRUTS_ACTION, printAction);

include(renderRequest, renderResponse);
}

@Override
public void doView(
RenderRequest renderRequest, RenderResponse renderResponse)
throws IOException, PortletException {

renderRequest.setAttribute(WebKeys.PORTLET_STRUTS_ACTION, viewAction);

include(renderRequest, renderResponse);
}

@Override
public void init(PortletConfig portletConfig) throws PortletException {
super.init(portletConfig);

aboutAction = getInitParameter("about-action");
configAction = getInitParameter("config-action");
editAction = getInitParameter("edit-action");
editDefaultsAction = getInitParameter("edit-defaults-action");
editGuestAction = getInitParameter("edit-guest-action");
helpAction = getInitParameter("help-action");
previewAction = getInitParameter("preview-action");
printAction = getInitParameter("print-action");
viewAction = getInitParameter("view-action");

copyRequestParameters = GetterUtil.getBoolean(
getInitParameter("copy-request-parameters"), true);

_portletConfig = (PortletConfigImpl)portletConfig;
}

@Override
public void processAction(
ActionRequest actionRequest, ActionResponse actionResponse)
throws IOException, PortletException {

String path = actionRequest.getParameter("struts_action");

if (Validator.isNotNull(path)) {

// Call processAction of com.liferay.portal.struts.PortletAction




try {


PortletRequestProcessor processor =
_getPortletRequestProcessor(actionRequest);

processor.process(actionRequest, actionResponse, path);
}
catch (ServletException se) {
throw new PortletException(se);
}


}


if (copyRequestParameters) {
PortalUtil.copyRequestParameters(actionRequest, actionResponse);
}
}

@Override
public void serveResource(
ResourceRequest resourceRequest, ResourceResponse resourceResponse)
throws IOException, PortletException {

resourceRequest.setAttribute(WebKeys.PORTLET_STRUTS_ACTION, viewAction);

// Call serveResource of com.liferay.portal.struts.PortletAction




try {


PortletRequestProcessor processor =
_getPortletRequestProcessor(resourceRequest);

processor.process(resourceRequest, resourceResponse);
}
catch (ServletException se) {
throw new PortletException(se);
}


}


protected void include(
RenderRequest renderRequest, RenderResponse renderResponse)
throws IOException, PortletException {

// Call render of com.liferay.portal.struts.PortletAction

Map<String, Object> strutsAttributes = null;

if (_portletConfig.isWARFile()) {
strutsAttributes = StrutsUtil.removeStrutsAttributes(
getPortletContext(), renderRequest);
}




try {


PortletRequestProcessor processor =
_getPortletRequestProcessor(renderRequest);

processor.process(renderRequest, renderResponse);
}
catch (ServletException se) {
throw new PortletException(se);
}
finally {


if (_portletConfig.isWARFile()) {
StrutsUtil.setStrutsAttributes(renderRequest, strutsAttributes);
}
}

if (copyRequestParameters) {
PortalUtil.clearRequestParameters(renderRequest);
}
}

private PortletRequestProcessor _getPortletRequestProcessor(
PortletRequest portletRequest) {

return (PortletRequestProcessor)getPortletContext().getAttribute(
WebKeys.PORTLET_STRUTS_PROCESSOR);
}

protected String aboutAction;
protected String configAction;
protected String editAction;
protected String editDefaultsAction;
protected String editGuestAction;
protected String helpAction;
protected String previewAction;
protected String printAction;
protected String viewAction;
protected boolean copyRequestParameters;

private PortletConfigImpl _portletConfig;
}




Ahora soy un emoticono feliz! emoticon emoticon