2016-06-13 10 views
2

Xpagesアプリケーションの上部にナビゲーションバーがあります。この要素は、多くのXpageアプリで共有される予定です.Xpageアプリのイントラネットのようなものです。Xpages:ユーザーがデータベースにアクセスできるかどうかを確認する

私は、データベースにアクセスできないユーザーにデータベースリンクを表示したくありません。

ユーザがデータベースにアクセスできるかどうかを確認するにはどうすればよいですか?これは何とかキャッシュする必要がありますので、何度も繰り返し読み込む必要はありません。

答えて

3

DatabaseメソッドqueryAccess(name)を使用すると、個々のユーザーのACLレベルを取得できます。その後、「アクセスなし」と「預金者」を確認できます。

db.queryAccess(userName) != ACL.LEVEL_NOACCESS && db.queryAccess(userName) != ACL.LEVEL_DEPOSITOR 

私はあなたがユーザーのユーザー豆でこれをキャッシュすることを提案します:ここではユーザーがDBへのアクセス権を持っている場合はtrueを返す例です。

3

パーの提案は素晴らしいですが、queryaccess上の1つの制限に注意してください。

ドキュメントから:

指定した名前がACLに明示的にリストされている場合、queryAccessは、そのACLのアクセスレベルを返します。グループをチェックしません。 指定した名前がACLに明示的にリストされていない場合、queryAccessは、その名前が、スクリプトが実行されているコンピュータで認識されているプラ​​イマリアドレス帳のグループのメンバーであるかどうかを確認します。ローカルワークステーションでは、そのアドレス帳は個人アドレス帳です。サーバー上では、そのアドレス帳はDomino®ディレクトリです。 queryAccessが1つ以上のグループの名前を検出すると、それらのグループの中で最も高いアクセス・レベルが戻されます。指定した名前が個別にまたはグループの一部としてACLにリストされていない場合、queryAccessはACLのデフォルトのアクセスレベルを返します。

3

まず、コードがユーザーの権限で実行されている場合、開くことができないデータベースに対してqueryAccessを呼び出すことはできません。この問題を回避するには、コードが署名者のセッションを使用してアクセス権を得るようにすることができます。しかし...

私はこれをお勧めします:hasAccessという名前のBeanを作ってください。 - 無用

  • セッションスコープ - 非常に細かいが、ACLの変更 の場合には、HTTP再起動するか、セッションタイムアウト
  • ビューのスコープを待つ必要があるだろう

    • 適用範囲は、ユーザー間で共有されます。スコープについて推奨され
    • 要求スコープは文句を言わないあなたは#{hasAccess[database]}ようにそれをバインドすることができるよう

    多くは、マップインタフェースの実装を支援ところdatabaseはなりますファイルパス、またはデータベースを検索するための特別なキーです。キャッシュを実装し、ユーザーのアクセスに応じてtrue/falseを返します。どのようにユーザーのアクセスがあなた次第であるかを判断する方法はありますが、try/catchを使ってそのデータベースを開き、isOpen()でチェックすることをお勧めします。

  • 関連する問題