FileMakerWebDirectが使いたいばかりに色々と実験をしていますが、自己流ではありますが、
ココがポイント
やっとログインユーザー毎にデータを制限する方法を見つけました!
テーブルとリレーション設定
ちょっとあるシステムを作成する傍ら実験をしていますので、テーブル名などは特徴的なネーミングになっていますが気にしないでください。
shipperテーブルがユーザーデータが入っているものです。
そして、orderテーブルが、IDで紐づいて入力したデータです。
やりたいことは、
ココがポイント
各ユーザーでログインした時に、そのユーザー以外のデータは制限
して見えないようにすることです。
FileMakerに関しては素人なので、最初はリレーション設定も適当にやっていましたが、ユーザー毎にデータを制限するなら、
キー(今回は「ID」)でのリレーション設定と、レコード作成許可、関連レコードを削除のチェックボックスにチェックを入れた方が良い事が後に分かりました。
テストユーザー登録と初期画面準備
とりあえず、上のようなテストユーザーを登録しました。
IDをユニークキーと考えて、後々のデータに制限かけます。
そして、ログイン後の登録画面として下のようなレイアウトを準備しました。
adminでのログインは、制限無しにしましたので、すべての仮データが見ることができてしまいます。
いちおうどのユーザーでログインしているのか分かるように、マージフィールド(グローバルID)を設置しました。
ログイン後のレイアウトが開くときに、下図のスクリプトを動かしてユーザーを絞りこみます。
現状だけでは、データを絞り込んだだけで他のデータも制限されている訳ではありません。
そこで、レコードに制限を掛けました。
レコードアクセス権限設定
「ファイル>>管理>>セキュリティ」からレコードやレイアウトなどの制限を掛けることができます。
自分の場合は、アクセス権セット名(Guser_limit)というネーミングでレコードだけ制限を掛ける事にしました。
ユーザー情報のテーブルであるshipper、pu_locationは、adminじゃないと編集ができないようにしてあります。また、orderは、ログインしているユーザーだけが操作できるように制限してあります。
これで、とりあえずログインIDによりデータの切り分けが可能になりました。
WebDirectでの見え方が変(まとめ)
ユーザー毎にデータの制限を掛けるという方法をテストしましたが、ユーザーIDでテーブルに制限を掛けるというのがポイントですね。そして
ココに注意
レイアウトに表示させるときに、対象レコードの絞り込みを行う
この辺がFileMakerの理解できないところですが、対象レコードに絞らないと、<アクセス権がありません>というレコードが表示されてしまうのです。
あえて制限を掛けている訳なのですから、完全に見えなくなってくれたほうがいいんですけどね。
もう一つ理解に苦しむのが、Get(アカウント名)からIDを読み込んで対象レコードの絞り込みを行うと挙動がおかしくなり、うまく絞り込みができません。
いったん、「$$ログインユーザー」というグローバル変数に、「Get(アカウント名)」の値を代入させてから、その変数で対象レコードの絞り込みを行いました。
まだまだ素人の自分には理解に苦しむ仕様です。
それから、ローカルのFileMakerProでは問題なく表示できるのに、WebDirectで見ると、制限されたIDの数だけポータルが出現してスクロールできるようになります。
orderテーブルは制限されているので入力するとアクセス権がないと弾かれますが、最初から表示して無い方がスマートです。
この辺も、対象レコードがちゃんと絞り込めてないとおかしな挙動をする原因になります。
それから、スクロール設定を色々とやるとWebDirectではおかしな表示をするときがあるので、調整が必要かと思います。
とりあえず、自己流ではありますが、ユーザー毎にデータを切り分ける方法を見つけることができました。
これで、1つのファイルで複数のユーザーで使用することが可能にはなりますが、FileMakerServerのライセンス制限があるので、その範囲内での人数使用であることは言うまでもありません。
FileMakerというソフト自体、一般公開するソフトではないって事ですね。