Frage

Ich habe eine Datenbank haben, die Benutzer, Rollen enthält und Berechtigungen. Ich möchte dies kartieren können, mit dem vorderen Ende (Java Swing) so ein Benutzer, der keine Aktion tun kann, kann es nicht sehen.

Ein Beispiel:

  • Rollen AddressManager hat Berechtigungen create_address, edit_address und remove_address.
  • Benutzer A verfügt über Berechtigungen create_address und edit_address.
  • Benutzer B hat die Berechtigung remove_address.

Ich möchte drei Tasten für die Adresse Ansicht, dass die Rollen aus dem AddressManager darstellen und für die Benutzer A und B, um die Tasten zu aktivieren / deaktivieren.

Frage: Gibt es eine einfache Möglichkeit, Datenbanktabelle Wert abzubilden Komponenten (Buttons) Swing

?

Eine Möglichkeit ist die assign enable / disable manuell auf jede einzelne Komponente, aber das ist unpraktisch, wenn es 40 Dialoge in der Anwendung mit über 200 Komponenten, die die Erlaubnis haben müssen.

War es hilfreich?

Lösung

Was Sie tun können, ist eine Klasse wie folgt zu schreiben und es überall zu benutzen. In Ihrem Beispiel würden Sie es mit neuen ActionContainer ( „Adresse“) hinzuzufügen; und es wird erstellen create_address, edit_address, delete_address Taste, die aktiviert werden, wenn der Benutzer das passende Recht besitzen.

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);
        }
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top