Динамически создавать элементы или разрешить / запретить пользовательские действия в java swing - PullRequest
1 голос
/ 20 декабря 2010

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

Пример:

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

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

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

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

1 Ответ

1 голос
/ 17 сентября 2011

Что вы можете сделать, так это написать такой класс и использовать его везде.В вашем примере вы добавили бы его с новым 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);
        }
    }
}
...