1

ユーザー、ロール、および権限を含むデータベースがあります。これをフロントエンド (Java Swing) にマップして、アクションを実行できないユーザーがそれを見ることができないようにしたいと考えています。

例:

  • 役割 AddressManager には、create_address、edit_address、remove_address の権限があります。
  • ユーザー A には、アクセス許可 create_address および edit_address があります。
  • ユーザー B には remove_address 権限があります。

AddressManager からのロールを表すアドレス ビュー用の 3 つのボタンと、ユーザー A と B がボタンを有効/無効にするための 3 つのボタンが必要です。

質問: データベース テーブルの値を Swing コンポーネント (ボタン) にマップする簡単な方法はありますか?

1 つの方法は、すべてのコンポーネントに手動で有効化/無効化を割り当てることですが、アプリケーションに 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 に答える