Динамически создавать элементы или разрешать / запрещать действия пользователя в java swing

У меня есть база данных, которая содержит пользователей, роли и разрешения. Я хочу иметь возможность сопоставить это с интерфейсом (Java Swing), чтобы пользователь, который не может выполнить действие, не мог его увидеть.

Пример:

  • Роль AddressManager имеет разрешения create_address, edit_address и remove_address.
  • Пользователь A имеет разрешения create_address и edit_address.
  • Пользователь B имеет разрешение remove_address.

Мне нужны три кнопки для представления адреса, которые представляют роли из AddressManager, и чтобы пользователи A и B включали / отключали кнопки.

Вопрос: Есть ли простой способ отобразить значения таблицы базы данных на компоненты Swing (кнопки)?

Один из способов - назначить включение / отключение вручную для каждого компонента, но это нецелесообразно, если в приложении имеется 40 диалоговых окон с примерно 200 компонентами, которые должны иметь разрешение.

1 ответ

Решение

Что вы можете сделать, так это написать такой класс и использовать его везде. В вашем примере вы добавили бы его с новым ActionContainer("адрес"); и он создаст кнопку create_address, edit_address, delete_address, которые активируются, если пользователь обладает правом на совпадение.

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);
        }
    }
}
Другие вопросы по тегам