Make your control panel custom portlet visible per site

Posted on 18/05/2016 by Charalampos Chrysikopoulos

Lets us assume we want to have an admin portlet in the content area in our site. We can do this by adding the following xml elements in the liferay-portlet.xml

...
<control-panel-entry-category>
content
</control-panel-entry-category>
<control-panel-entry-weight>1.5</control-panel-entry-weight>
...

But then we notice that this portlet exists also in the other sites. And we don't want that.

The solution to this problem is to add a class that implements the ControlPanelEntry interface.

This interface declares 3 methods that can allow you to restrict the visibility of the menu item:

        @Override
public boolean hasAccessPermission(PermissionChecker permissionChecker, Group group, Portlet portlet)
throws Exception {
 
if (MY_GROUP_ID == group.getGroupId()) {
return true;
}
return false;
}
 
@Override
public boolean isVisible(PermissionChecker permissionChecker, Portlet portlet)
throws Exception {
 
return true;
}
 
@Override
public boolean isVisible(Portlet portlet, String category, ThemeDisplay themeDisplay)
throws Exception {
 
if (MY_GROUP_ID == themeDisplay.getScopeGroupId()) {
return true;
}
 
return false;
}

This class must be also declared in liferay-portlet.xml like following

...
<control-panel-entry-category>
content
</control-panel-entry-category>
<control-panel-entry-weight>1.5</control-panel-entry-weight>
<control-panel-entry-class>your.entry.ClassHere</control-panel-entry-class>
...
This entry was posted in Liferay, Uncategorized and tagged Configuration, liferay 6.2 by Charalampos Chrysikopoulos