Динамически создавать элементы или разрешать / запрещать действия пользователя в 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);
}
}
}