1

GWT アプリで GWTP を使用しており、次のアーキテクチャを使用しています。

LoginPresenter (Presenter)
    DashboardPresenter (TabContainerPresenter)
        TabbedPresenter1 (Presenter)
        TabbedPresenter2 (Presenter)
        TabbedPresenter3 (Presenter)

アプリを初めて起動すると、DashboardPresenter で onBind メソッドと addTab メソッドが呼び出され、タブに移動すると、そのプレゼンターで onbind メソッドが呼び出されます。

PlaceRequest を作成し、PlaceManager 経由で (ログアウト ボタンを押して) LoginPresenter に戻ると、ログイン プレゼンターに戻ります。

問題は、再度ログインすると、すべての onBind メソッドがまだメモリ内にあるために呼び出されないことです。onReset と onReveal は正しく呼び出されますが、各プレゼンターがリセットされ、ログインごとに onBind が呼び出されることを強く望みます。

ログイン イベントでどのタブをユーザーに表示するかを決定し、ユーザーがそれらのタブを表示するための十分な権限を持っていない場合は、DashboardPresenter の addTab メソッドでタブを制限します。ただし、現時点では、ユーザーが最初にログインしたときにタブが設定されますが、次回は設定されません。これは、権限の低いユーザーが管理者ユーザーの後にログインすると、管理者と同じタブが表示されることを意味します。良くない!

これにどのように対処すればよいですか?ユーザーがログアウトする(ログインページに移動する)ときに、すべてのプレゼンターまたはセッションを「リセット」したいと思います。以前と同じバインドされたオブジェクトを返さないように、「リセット」する必要があるのは Ginjector ですか?

明確にするために、機密データにアクセスする権限のないユーザーを禁止するサーバー側のセキュリティがあります。しかし、ユーザーがログインすると、gwt アプリはユーザーがアクセスできる機能のリストを受け取ります。これは、ユーザーの権限に合わせて UI をカスタマイズするために使用されます。(たとえば、ユーザーの権限に基づいて表示されるタブをカスタマイズします)。

4

2 に答える 2

0

次のようなプレゼンターで簡単に使用できる GateKeeper を検討する必要があると思います。

@ProxyCodeSplit
@NameToken(NameTokens....)
@UseGatekeeper( Your1GateKeeper.class)
public interface MyProxy extends TabContentProxyPlace<YourPresenter> {
}

また、ダッシュボード プレゼンターを GateKeeper に挿入して、このタブが使用可能かどうかを確認できます。

@Singleton
public class Your1GateKeeper implements Gatekeeper{

 private DashboardPresenter presenter;

 @Inject
 public ReadOnlyGateKeeper(DashboardPresenter presenter) {
    this.presenter = presenter;
 }

 @Override
 public boolean canReveal() {
    return presenter.isAvailable();
 }

}

したがって、適切なゲートキーパーを使用すると、必要なセキュリティに到達できます。

于 2012-12-07T21:59:38.333 に答える
0

これが機能するかどうかはわかりません:

LogoutEventただし、 globalでを起動し、 「アンロード」する必要があるEventBusすべて(など) でそれを処理し、それらを呼び出すことができます。その後、に戻りますPresentersTabbedPresenter1onUnbind()LoginPresenter

TabData別の方法として、カスタム(サブクラスTabDataBasic化してフラグを追加)を作成することもできますhasAccess。再び aLogoutEventを起動し、それを処理すると、次のようなことができます。

TabDataDynamic tabData = (TabDataDynamic)getProxy().getTabData();
tabData.setHasAccess(false);
getProxy().changeTab(tabData);

YoutTabPanelの実装では、フラグが false に設定されている場合、タブが非表示になっていることを確認する必要があります。

于 2012-12-03T10:52:57.683 に答える