动态创建项目或允许 /禁止在Java Swing中的用户操作
-
11-10-2019 - |
题
我有一个包含用户,角色和权限的数据库。我希望能够将其映射到前端(Java Swing),以便无法执行操作的用户看不到它。
一个例子:
- 角色地址manager具有权限create_address,edit_address和remove_address。
- 用户A具有权限create_address和edit_address。
- 用户B具有权限remove_address。
我需要三个按钮来代表地址管理器的角色,以及用户a和b启用 /禁用按钮。
问题:是否有任何简单的方法将数据库表值映射到摇摆组件(按钮)?
一种方法是将启用/禁用为每个组件分配/禁用,但是如果应用程序中有40个对话框,则大约有200个必须有许可的组件,那是不可行的。
解决方案
您能做的就是写这样的课程并在任何地方使用它。在您的示例中,您将使用新的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);
}
}
}
不隶属于 StackOverflow