Dinamicamente creare elementi o consentire / azioni utente disallow in Java Swing
-
11-10-2019 - |
Domanda
Ho un database che contiene gli utenti, ruoli e permessi. Voglio essere in grado di mappare questo al front-end (Java Swing) in modo da un utente che non può fare un'azione non può vederlo.
Un esempio:
- AddressManager ruolo dispone di autorizzazioni create_address, edit_address e remove_address.
- L'utente A dispone di autorizzazioni create_address e edit_address.
- L'utente B ha il permesso remove_address.
Voglio tre pulsanti per la visualizzazione di indirizzo che rappresentano i ruoli del AddressManager, e per gli utenti A e B per attivare / disattivare i pulsanti.
Domanda: C'è un modo semplice per mappare i valori della tabella di database a Swing componenti (Buttons)
?Un modo è quello di assegnare abilitare / disabilitare manualmente ad ogni singolo componente, ma che è poco pratica se ci sono 40 dialoghi nell'applicazione con circa 200 componenti che deve avere l'autorizzazione.
Soluzione
Che cosa si può fare è quello di scrivere una classe come questo e usarlo ovunque. Nel tuo esempio si dovrebbe aggiungere che con il nuovo ActionContainer ( "indirizzo"); e creerà un create_address, edit_address, Button delete_address che sono attivati ??se l'utente possiede il diritto di corrispondenza.
package de.steamnet.samples;
// This class is a Panel that renders buttons based on rights.
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JPanel;
public class ActionContainer extends JPanel {
List<JButton> buttons = new ArrayList<JButton>();
public ActionContainer(String rightBase) {
List<String> rights = database.getRightsStartingWith(rightBase);
for(String nextRight : rights) {
JButton next = new JButton(nextRight);
buttons.add(next);
if(user.hasRight(nextRight)) {
next.setEnabled(true);
} else {
next.setEnabled(false);
}
add(next);
}
}
public void addActionListener(ActionListener al) {
for(JButton next: buttons) {
next.addActionListener(al);
}
}
}