Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

ユーザが、自分自身のイベントだけを見るようにするにはどうしますか?

概要

ユーザに対して表示されるイベントを簡単に制限できます。制限するには、2通りの方法があります。フィルタを使う方法と、アクセス権を使う方法です。

フィルタを使う方法はシンプルです。イベントの「オーナー」のフィルタを新たに作成し、カレンダーをあらかじめフィルタリングすれば、そのオーナーのイベントだけが表示されます。ただしこれだけだと、ユーザはフィルタをリセットしてほかのイベントを見ることができます。このようにしておくほうが便利な場合もあります。

イベントを検索して表示する際に、カレンダーが実行する検索を横取りしてカレンダーにフィルタをかけることもできます。これは、ユーザが変更できないフィルタと考えられます。

どちらのフィルタリングの方法も、カレンダーのインターフェイスを利用して表示内容を制限しています。ユーザはイベントのリストを操作し、イベントを検索すると、他のユーザのイベントが検索される可能性があります。これでは都合が悪い場合には、FileMakerのアクセス権の機能を使って、ユーザに対して表示される内容を制限します。この方法はFileMakerに付属の機能を利用するものであり、このカレンダーに固有の方法ではありません。

フィルタを使う

あらかじめフィルタをかける

カレンダーに表示される内容を制限する最も簡単な方法は、フィルタを使うことです。おそらく、ユーザがカレンダーを開く際にあらかじめフィルタをかけるようにしておくことが多いでしょう。カレンダーにあらかじめフィルタをかける方法については「フィルタ」を参照してください。

見えないフィルタをハードコードする

もうひとつの方法は、レコードを探す際に実行される検索を横取りするものです。これは、見えないフィルタと考えられます。この方法を使うには、「Write FileMaker Source to Variable」スクリプトの編集ウインドウを開き、「Nothing Found?」のコメントを見つけます。このコメントの直前に使用する検索を挿入し、「対象レコードの絞り込み」として実行します。例を以下に示します。

 

Panel

検索モードに切り替え []

フィールド設定 [SampleEvents::Event User; Get ( アカウント名 )]

対象レコードの絞り込み []

これで、表示されるイベントは、該当するテーブルの「Event User」フィールドが現在ログインしているユーザのアカウント名と一致するものだけに制限されます。もちろん、これを変更して、他の条件で検索したり、あるいは特定のアクセス権セットのユーザがログインしているときのみイベントを制限したりすることができます。

アクセス権を使う

概要

簡単に設定できます。FileMakerのアクセス権の機能を使って、ログインしているユーザに応じて、どのレコードが表示されるか、編集できるかなどのルールを作成します。表示できるレイアウトの制限や、特定のフィールドに対してアクセスできるかどうかの制限までできます。

これまでにFileMakerのアクセス権を扱ったことがなければ、FileMakerに付属のヘルプで概要を読み、「目次」>「データベースの保護」>「アクセス権セットの作成と管理」>「レコードアクセス権の編集」を確認してください。

 ユーザに対して表示されるレコードの制限については、ヘルプの「レコードアクセス権の編集」ページを参照してください。箇条書き4.の下にある「制限」のオプションについての説明が参考になるでしょう。

ヒントとテクニック

ここでテクニックを要する部分は1つだけです。それは、ユーザのログインの状況を把握して、それをカレンダーのユーザのテーブルのフィールドと結びつけることです。これに使用できるのは、「Get ( アカウント名 )」と「Get ( アカウントアクセス権セット名 )」です。アクセス権セットの名前はおそらく「administrator」や「sales rep」といった一般的なもので、FileMakerのアクセス権を使ってどのユーザから見えるか、編集可能かを制限している可能性があります。たとえば、アクセス権を作成して、営業担当者はカレンダーの管理タブにはアクセスできないようにするなどの例があります。

そこでおそらく、アクセス権の計算式で「Get ( アカウント名 )」を使って、ログインしているユーザと、予定に結びつけられているユーザを比較することになるでしょう。これには2つのやり方があります。

1. ユーザのアカウント名を、データベース中の既存のフィールドに一致させることができます。アカウント名はすべてユーザの実際の姓名にします。たとえば「Bill Smith」のようなアカウント名になります。そのようにしていると、ログインしているユーザの予定だけを表示するためのアカウント名の計算式は、以下のようになります。

Code Block
Not isEmpty ( FilterValues ( List ( SampleEvents::UserNameFirstLastCalc ) ; Get ( アカウント名 ) ) )

この計算式は、「Source No 1」レイアウトに使用しているのと同じテーブルオカレンスのコンテクストから評価されるように設定していることに注意してください。このため、この計算式に関して注意すべき点がいくつかあります。まず、この計算式は「1」または「0」の値を返すだけであるということです。アカウント名が、予定と結びつけられているユーザの名前のうちの1つである場合は、「1」を返します。そうでない場合は「0」を返します。アクセス権の計算式はこのように作成する必要があります。ユーザがレコードを見たり編集したりできる場合には「1」(すなわち「真」)を返すということです。また、「=」の記号を使用しないことにも注意してください。その理由は、複数の人に関係する予定もあり得るため、予定を所有しているユーザは、特定の誰か1人のユーザと「イコール」ではないからです。「=」の代わりに、「FilterValues」を使って、アカウント名が予定に関係するユーザの「メンバーである」かどうかを判断しています。

 2. 2つめの方法は、ユーザのテーブルにフィールドを作って、アカウント名と一致させるということです。基本的にはアカウント名をFileMakerに記録します。もちろん、ユーザのパスワードをFileMakerにセキュアでない形では記録してはいけません。

 ユーザ名の索引がイベントのテーブルにない場合、この計算式はソリューションの処理速度をきわめて低下させることに注意してください。FileMakerは表示のためにイベントのひとつひとつについて関連する情報を探すからです。

 もちろん、一部のユーザは全員の予定が見られるようにしたいということもあるでしょう。この場合も、上述の計算式を大幅に変える必要はありません。一部の「パワーユーザ」に対して、予定の表示をまったく制限しないアクセス権セットを割り当てるだけです。