1

我有一个包含用户、角色和权限的数据库。我希望能够将其映射到前端(Java Swing),这样无法执行操作的用户就看不到它。

一个例子:

  • 角色 AddressManager 具有权限 create_address、edit_address 和 remove_address。
  • 用户 A 具有 create_address 和 edit_address 权限。
  • 用户 B 有权限 remove_address。

我想要三个按钮用于地址视图,代表 AddressManager 中的角色,并让用户 A 和 B 启用/禁用按钮。

问题:有没有简单的方法将数据库表值映射到 Swing 组件(按钮)?

一种方法是手动为每个组件分配启用/禁用,但如果应用程序中有 40 个对话框,其中大约 200 个组件必须具有权限,那么这是不切实际的。

4

1 回答 1

1

你能做的就是写一个这样的类并在任何地方使用它。在您的示例中,您将使用 new ActionContainer("adress"); 添加它 如果用户拥有匹配权限,它将创建一个 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);
        }
    }
}
于 2011-09-17T13:36:57.307 回答