12

Webアプリケーションがあり、そのフロントエンドはGWT/GXTで実装されています。ユーザーはさまざまなグループに属することができ、これらのグループはさまざまな権限を持つことができます。権限は非常にきめ細かく、たとえば、comment_create、comment_edit、comment_delete、comment_readなどです。

ユーザー権限に基づいてユーザーインターフェイスコントロールを有効または無効にする最良の方法は何でしょうか?指定されたユーザー名と権限名でブール値を返すユーティリティメソッドがあります。ただし、現時点では、各コントロールがif句内にラップされているため、コードが少し乱雑になります。

4

5 に答える 5

3

私は同じ問題を抱えていました。ここに私の解決策があります。

各 UI コンポーネントにはオン/オフの状態 (表示/非表示、有効/無効、編集可能/読み取り専用) があり、その状態は 1 つ以上のアクセス許可にバインドできます。たとえば、編集ボタンは、ユーザーが EDIT パーミッションを持っている場合は有効にでき、そうでない場合は無効にできます。

UI コンポーネントをアクセス許可にバインドするバインダー クラスを作成しました。バインダーは、イベントを使用して一連のアクセス許可が送信されるイベント バスを通じて、現在のユーザー アクセス許可 (すべてのアクセス許可) を認識します。イベントが受信されるたびに、バインダーはパーミッションが存在するかどうかをチェックし (代わりに、パーミッションごとにブール値を使用します)、変更をコンポーネントに適用します (たとえば、有効化または無効化)。

イベント バスは、すべての UI コンポーネント間の唯一の接続です。

Gin といくつかのヘルパー クラスを使用すると、バインディング コードは次のようになります。

FeatureBinder.bind(editButton, EDIT_PERMISSION);
于 2013-10-23T16:00:10.173 に答える
1

これをGWT/GXTでどのように実装するかはわかりませんが、メニューを有効にする古いMFCの方法から始めることができます。

ON_UPDATE_COMMAND_UIこれには、メニューIDとメソッド名を指定した別のメッセージがありました。メソッドが呼び出され、ロジックに応じてそのメニューオプションを有効または無効にできます。あなたの場合、それはユーザーIDに基づいています。これはメニューIDごとに基づいているため、必要に応じて細かく調整できます。

于 2010-07-06T09:30:57.647 に答える
0

制限されたウィジェットで使用して、バージョンsetEnabled(boolean)と比較して 2 行のコードを節約できます。if

Button editButton = new Button();
editButton.setText("Edit");
editButton.setEnabled(SecurityManager.userHasPermission(currentUser, Permissions.DOCUMENT_EDIT));
toolbar.add(editButton);

Button deleteButton = new Button();
deleteButton.setText("Delete");
deleteButton.setEnabled(SecurityManager.userHasPermission(currentUser, Permissions.DOCUMENT_DELETE));
toolbar.add(deleteButton);
于 2011-07-08T05:52:56.680 に答える
0

デコレータ パターンを参照してください。

于 2010-07-06T09:40:57.260 に答える