La gestione standard di ruoli e permessi si effettua direttamente dal pannello di controllo di Liferay; potrebbe però succedere di dover mettere mano a tali permessi in maniera programmatica, ossia all'interno del codice delle proprie portlet.
Vediamo quindi come fare...
Gestione dei ruoli
Come prima cosa vediamo come creare un ruolo.
Role role = RoleLocalServiceUtil.fetchRole(themeDisplay.getCompanyId(), "MioRuolo");
if (role == null) {
role = RoleLocalServiceUtil.addRole(
themeDisplay.getUserId(), themeDisplay.getCompanyId(),
"MioRuolo", null, null, 1);
role
.setTitle("Titolo del ruolo");
role
.setDescription("Descrizione del ruolo");
role
= RoleLocalServiceUtil.updateRole(role);
}
Gestione dei permessi
Una volta ottenuta l'istanza del ruolo è possibile assegnare i permessi di default.
Permessi a livello di portlet
Vediamo come assegnare i permessi a livello di singola portlet.
Ricordiamo che i permessi associati ad una portlet sono identificati da stringhe, come ad esempio ADD_CUSTOMER, EDIT_CUSTOMER, DELETE_CUSTOMER; supponiamo quindi di voler assegnare questi 3 permessi (a livello di portlet) al ruolo che abbiamo creato sopra.
// definizione dei permessi da associare
// alla portlet custom "miaportlet_WAR_progettoportlet
"
String[] actiondIds = {"ADD_CUSTOMER", "EDIT_CUSTOMER", "DELETE_CUSTOMER"};
for (String actionId : actionIds) {
ResourcePermissionServiceUtil.addResourcePermission(
themeDisplay.getGroupId(),
themeDisplay.getC
ompanyId(),
"
miaportlet_WAR_progettoportlet",
ResourceConstants.SCOPE_GROUP,
"" +
themeDisplay.getGroupId()
,
role.getRoleId(),
actionId);
}
Quanto citato sopra è valido per le portlet applicative di frontend; nel caso in cui sia necessario creare permessi per le portlet del pannello di controllo occorre aggiungere anche il permesso ActionKeys.ACCESS_IN_CONTROL_PANEL altrimenti la portlet non sarà visibile.
Permessi a livello di model
Vediamo come assegnare i permessi a livello di singolo model.
Supponiamo ora di dover gestire i permessi generici ActionKeys.UPDATE e ActionKeys.DELETE.
// definizione dei permessi da associare
// al model it.dvel.liferay.model.Customer
String[] actiondIds = {ActionKeys.UPDATE, ActionKeys.DELETE};
for (String actionId : actionIds) {
ResourcePermissionServiceUtil.addResourcePermission(
themeDisplay.getGroupId(),
themeDisplay.getC
ompanyId(),
"
it.dvel.liferay.model.Customer
",
ResourceConstants.SCOPE_GROUP,
"" +
themeDisplay.getGroupId()
,
role.getRoleId(),
actionId);
}
Enjoy!