/*
* Copyright (C) 2015 Arthur Gregorio, AG.Software
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package br.com.webbudget.domain.model.security;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
import javax.enterprise.context.Dependent;
import javax.inject.Named;
import lombok.Getter;
/**
* Mapeamento das permissoes individuais do sistema
*
* @author Arthur Gregorio
*
* @version 1.3.0
* @since 1.0.0, 24/06/2014
*/
@Named
@Dependent
public class Authorization {
@Getter
@AuthorizationGroup("authority.configuration")
public final String CONFIGURATION_VIEW = "authority.configuration.access";
@Getter
@AuthorizationGroup("authority.configuration")
public final String CONFIGURATION_INSERT = "authority.configuration.add";
@Getter
@AuthorizationGroup("authority.card")
public final String CARD_VIEW = "authority.card.access";
@Getter
@AuthorizationGroup("authority.card")
public final String CARD_STATISTICS = "authority.card.statistics";
@Getter
@AuthorizationGroup("authority.card")
public final String CARD_INSERT = "authority.card.add";
@Getter
@AuthorizationGroup("authority.card")
public final String CARD_UPDATE = "authority.card.edit";
@Getter
@AuthorizationGroup("authority.card")
public final String CARD_DELETE = "authority.card.delete";
@Getter
@AuthorizationGroup("authority.contact")
public final String CONTACT_VIEW = "authority.contact.access";
@Getter
@AuthorizationGroup("authority.contact")
public final String CONTACT_INSERT = "authority.contact.add";
@Getter
@AuthorizationGroup("authority.contact")
public final String CONTACT_UPDATE = "authority.contact.edit";
@Getter
@AuthorizationGroup("authority.contact")
public final String CONTACT_DELETE = "authority.contact.delete";
@Getter
@AuthorizationGroup("authority.wallet")
public final String WALLET_VIEW = "authority.wallet.access";
@Getter
@AuthorizationGroup("authority.wallet")
public final String WALLET_INSERT = "authority.wallet.add";
@Getter
@AuthorizationGroup("authority.wallet")
public final String WALLET_UPDATE = "authority.wallet.edit";
@Getter
@AuthorizationGroup("authority.wallet")
public final String WALLET_DELETE = "authority.wallet.delete";
@Getter
@AuthorizationGroup("authority.wallet")
public final String WALLET_ADJUST_BALANCE = "authority.wallet.adjust-balance";
@Getter
@AuthorizationGroup("authority.cost-center")
public final String COST_CENTER_VIEW = "authority.cost-center.access";
@Getter
@AuthorizationGroup("authority.cost-center")
public final String COST_CENTER_INSERT = "authority.cost-center.add";
@Getter
@AuthorizationGroup("authority.cost-center")
public final String COST_CENTER_UPDATE = "authority.cost-center.edit";
@Getter
@AuthorizationGroup("authority.cost-center")
public final String COST_CENTER_DELETE = "authority.cost-center.delete";
@Getter
@AuthorizationGroup("authority.movement-class")
public final String MOVEMENT_CLASS_VIEW = "authority.movement-class.access";
@Getter
@AuthorizationGroup("authority.movement-class")
public final String MOVEMENT_CLASS_INSERT = "authority.movement-class.add";
@Getter
@AuthorizationGroup("authority.movement-class")
public final String MOVEMENT_CLASS_UPDATE = "authority.movement-class.edit";
@Getter
@AuthorizationGroup("authority.movement-class")
public final String MOVEMENT_CLASS_DELETE = "authority.movement-class.delete";
@Getter
@AuthorizationGroup("authority.movement")
public final String MOVEMENT_VIEW = "authority.movement.access";
@Getter
@AuthorizationGroup("authority.movement")
public final String MOVEMENT_INSERT = "authority.movement.add";
@Getter
@AuthorizationGroup("authority.movement")
public final String MOVEMENT_UPDATE = "authority.movement.edit";
@Getter
@AuthorizationGroup("authority.movement")
public final String MOVEMENT_PAY = "authority.movement.pay";
@Getter
@AuthorizationGroup("authority.movement")
public final String MOVEMENT_DELETE = "authority.movement.delete";
@Getter
@AuthorizationGroup("authority.fixed-movement")
public final String FIXED_MOVEMENT_VIEW = "authority.fixed-movement.access";
@Getter
@AuthorizationGroup("authority.fixed-movement")
public final String FIXED_MOVEMENT_INSERT = "authority.fixed-movement.add";
@Getter
@AuthorizationGroup("authority.fixed-movement")
public final String FIXED_MOVEMENT_UPDATE = "authority.fixed-movement.edit";
@Getter
@AuthorizationGroup("authority.fixed-movement")
public final String FIXED_MOVEMENT_DELETE = "authority.fixed-movement.delete";
@Getter
@AuthorizationGroup("authority.fixed-movement")
public final String FIXED_MOVEMENT_LAUNCH = "authority.fixed-movement.launch";
@Getter
@AuthorizationGroup("authority.fixed-movement")
public final String FIXED_MOVEMENT_LAUNCHES = "authority.fixed-movement.launches";
@Getter
@AuthorizationGroup("authority.card-invoice")
public final String CARD_INVOICE_PAY = "authority.card-invoice.pay";
@Getter
@AuthorizationGroup("authority.card-invoice")
public final String CARD_INVOICE_VIEW = "authority.card-invoice.access";
@Getter
@AuthorizationGroup("authority.card-invoice")
public final String CARD_INVOICE_PROCESS = "authority.card-invoice.process";
@Getter
@AuthorizationGroup("authority.card-invoice")
public final String CARD_INVOICE_HISTORIC = "authority.card-invoice.historic";
@Getter
@AuthorizationGroup("authority.balance-transference")
public final String BALANCE_TRANSFERENCE_VIEW = "authority.balance-transference.access";
@Getter
@AuthorizationGroup("authority.balance-transference")
public final String BALANCE_TRANSFERENCE_MAKE = "authority.balance-transference.make";
@Getter
@AuthorizationGroup("authority.financial-period")
public final String FINANCIAL_PERIOD_VIEW = "authority.financial-period.access";
@Getter
@AuthorizationGroup("authority.financial-period")
public final String FINANCIAL_PERIOD_INSERT = "authority.financial-period.add";
@Getter
@AuthorizationGroup("authority.financial-period")
public final String FINANCIAL_PERIOD_DELETE = "authority.financial-period.delete";
@Getter
@AuthorizationGroup("authority.financial-period")
public final String FINANCIAL_PERIOD_DETAILS = "authority.financial-period.details";
@Getter
@AuthorizationGroup("authority.closing")
public final String CLOSING_VIEW = "authority.closing.access";
@Getter
@AuthorizationGroup("authority.closing")
public final String CLOSING_CLOSE = "authority.closing.close";
@Getter
@AuthorizationGroup("authority.closing")
public final String CLOSING_PROCESS = "authority.closing.process";
@Getter
@AuthorizationGroup("authority.user")
public final String USER_VIEW = "authority.user.access";
@Getter
@AuthorizationGroup("authority.user")
public final String USER_INSERT = "authority.user.add";
@Getter
@AuthorizationGroup("authority.user")
public final String USER_UPDATE = "authority.user.edit";
@Getter
@AuthorizationGroup("authority.user")
public final String USER_DELETE = "authority.user.delete";
@Getter
@AuthorizationGroup("authority.group")
public final String GROUP_VIEW = "authority.group.access";
@Getter
@AuthorizationGroup("authority.group")
public final String GROUP_INSERT = "authority.group.add";
@Getter
@AuthorizationGroup("authority.group")
public final String GROUP_UPDATE = "authority.group.edit";
@Getter
@AuthorizationGroup("authority.group")
public final String GROUP_DELETE = "authority.group.delete";
@Getter
@AuthorizationGroup("authority.message")
public final String MESSAGE_SEND = "authority.message.send";
@Getter
@AuthorizationGroup("authority.vehicle")
public final String VEHICLE_VIEW = "authority.vehicle.access";
@Getter
@AuthorizationGroup("authority.vehicle")
public final String VEHICLE_INSERT = "authority.vehicle.add";
@Getter
@AuthorizationGroup("authority.vehicle")
public final String VEHICLE_UPDATE = "authority.vehicle.edit";
@Getter
@AuthorizationGroup("authority.vehicle")
public final String VEHICLE_DELETE = "authority.vehicle.delete";
@Getter
@AuthorizationGroup("authority.entries")
public final String ENTRIES_VIEW = "authority.entries.access";
@Getter
@AuthorizationGroup("authority.entries")
public final String ENTRIES_INSERT = "authority.entries.add";
@Getter
@AuthorizationGroup("authority.entries")
public final String ENTRIES_UPDATE = "authority.entries.edit";
@Getter
@AuthorizationGroup("authority.entries")
public final String ENTRIES_DELETE = "authority.entries.delete";
@Getter
@AuthorizationGroup("authority.refueling")
public final String REFUELING_VIEW = "authority.refueling.access";
@Getter
@AuthorizationGroup("authority.refueling")
public final String REFUELING_INSERT = "authority.refueling.add";
@Getter
@AuthorizationGroup("authority.refueling")
public final String REFUELING_DELETE = "authority.refueling.delete";
/**
* Lista todas as authorities disponiveis para uso, este metodo e utilzado
* para criar o admin no bootstrap da aplicacao
*
* @return um set com todas as authorities disponiveis
*/
public List<String> listAuthorizations() {
final List<String> authorities = new ArrayList<>();
for (Field field : this.getClass().getDeclaredFields()) {
field.setAccessible(true);
// verifica se a permissao tem grupo de permisao
if (field.isAnnotationPresent(AuthorizationGroup.class)) {
// adiciona as permissoes especificas
try {
authorities.add((String) field.get(Authorization.this));
} catch (IllegalAccessException ex) { }
}
}
return authorities;
}
/**
* Lista todas as authorities agrupadas pelo grupo de cada uma
*
* @return hashmap com os valores: grupo e itens do grupo
*/
public HashMap<String, List<String>> listGroupedAuthorizations() {
final HashMap<String, List<String>> authorities = new HashMap<>();
final List<String> authorizations = this.listAuthorizations();
for (Field field : this.getClass().getDeclaredFields()) {
field.setAccessible(true);
if (field.isAnnotationPresent(AuthorizationGroup.class)) {
final String group = field.getAnnotation(AuthorizationGroup.class).value();
if (!authorities.containsKey(group)) {
final List<String> grouped = authorizations.stream()
.filter(authorization -> authorization.contains(group + "."))
.collect(Collectors.toList());
authorities.put(group, grouped);
}
}
}
return authorities;
}
}