初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2014-05-12 11:00:33

daisuket
Member

アカウント名の一覧取得

Get(システム IP アドレス)とGet(アカウント名)を合わせて取得することで「同じアカウントでログインできるのは1端末のみ」
という仕組みを作りたくて、ログイン・ログアウト時に別テーブルにアカウント名を書き込んだり消去したりという
香盤表のようなもので管理すればいいと思いつきました。

通常の形でアカウント認証を行った後にスクリプトトリガを動かして、一致するアカウント情報が
あった場合にはメッセージを出したうえでファイルを閉じる、というイメージです。
終了時には記録されたアカウント情報を消去してやり、次回ログインに備えるという形です。

が、クラッシュなど異常な終わり方をしてスクリプトトリガが働かなかった場合にログイン情報が残り、
永遠にログインできない、という問題をどう回避しようかと思っています。

上記のような問題を回避する方法があればご教示いただきたいのと、そもそもの話として
FileMaker Pro環境においてアクセス中のアカウント名一覧を取得することはできないのでしょうか。
「WindowNames」で現在開いているウインドウ名の一覧を取得できますが、あのようなイメージです。

Admin Consoleではアクセス中のアカウント名一覧を確認できますが、今回の件では
パートナー企業様に配布するような形で考えているため、FileMaker Pro環境で実現できないかと
思っています。FileMaker Proのバージョンは12もしくは13です。

Offline

#2 2014-05-12 16:34:58

Traveller
Guest

Re: アカウント名の一覧取得

ホストの別テーブルに各クライアントPCのデスクトップパスとアカウントの組合せのレコードを
作っておいて元テーブルとXリレーション。
ログインされたときそのクライアントPCのGet(デスクトップパス)とGet(アカウント)の組合せが
別テーブルのリストに有るかどうかで判定するとか?

#3 2014-05-12 19:41:03

とおりすがり
Guest

Re: アカウント名の一覧取得

Traveller wrote:

ホストの別テーブルに各クライアントPCのデスクトップパスとアカウントの組合せのレコードを
作っておいて元テーブルとXリレーション。
ログインされたときそのクライアントPCのGet(デスクトップパス)とGet(アカウント)の組合せが
別テーブルのリストに有るかどうかで判定するとか?

その方法だと daisuket さんの今の方法と変わりなくて、異常終了した時に、管理者権限のある人が操作しないといけなくなってしまう…

#4 2014-05-12 20:05:13

daisuket
Member

Re: アカウント名の一覧取得

Travellerさん、ご回答ありがとうございました。
しかし、Travellerさんのおっしゃるように、管理者権限を持つ人の神の手が
必要になってしまうんです。

ただ、Get(システム IP アドレス)ではなくGet(デスクトップパス)で端末を判定するのは
参考になりました。これだとDHCPを導入しているところでも使えるかもしれません。

Offline

#5 2014-05-12 20:42:54

飾る
Guest

Re: アカウント名の一覧取得

管理者以外もログイン状態を解除できるとしたら、制限する意味がないのでは。
サーバじゃないんだから、ホストのPCで操作すれば、誰でもできますよ。

#6 2014-05-12 21:26:48

FM12始めたばかり
Guest

Re: アカウント名の一覧取得

>ログインできるのは1端末のみ

メインのFMファイル(A)と情報ファイル(B)でリレーションを組みます

Bの構成
1 IPフィールド(空) AからGET(MACアドレス)を書き込む ← 認証チェック用
2 パスワードフィールド(有文字) Aに読込後、Bの値を削除し、Aに認証フラッグを記入

起動時に、上記の2系列で認証を確認してます。
この方法だと、Bファイルの再配布だけで別pc用としても使えます。
セコイ話なのですが、Bファイルの拡張子はDLLに変更してマウスクリックで読めないようにしてます(WINで)
拡張子変更しても、元ファイルがFMなら支障なく読み込めてます。

的外しかたなぁ・・・

#7 2014-05-12 22:33:05

Shin
Member

Re: アカウント名の一覧取得

アイデアだけですが
サーバー側に、アカウント管理用のテーブル(1アカウント1レコード)を作っておきます。
クライアントからは、ファイルを開く時に、アカウント管理へアクセスするための専用ウィンドウを必ず開き、自分のレコードのフィールドをアクティブにしておき、このウィンドウはそのままの隠しておく状態にしておきます。
他のクライアントからは、同じレコードをアクティブに出来ませんので、エラーになり、エラーが起きれば、アプリケーションを終了させます。
ただ、クライアントがクラッシュした時に、そのアカウント管理テーブルが破壊される可能性があり、検証が必要でしょうね。

Offline

#8 2014-05-12 23:51:46

Moz
Member

Re: アカウント名の一覧取得

12以上ということなので Get ( 持続 ID ) でもよいのではと思うのですが、
避けているのには何か理由があるのでしょうか?

http://www.filemaker.com/help/13/fmp/ja … 32.60.html

Last edited by Moz (2014-05-12 23:52:25)

Offline

#9 2014-05-13 09:11:55

Traveller
Guest

Re: アカウント名の一覧取得

渡すファイルには管理者権限は無いということなのですか?

#10 2014-05-13 11:15:51

daisuket
Member

Re: アカウント名の一覧取得

みなさま、ご回答ありがとうございました。
状況としては、パートナー企業様にお渡しするソリューションに、発行アカウント(同時アクセス制限)による
従量制の料金体系を組み込みたいという背景があります。
なので、渡すファイルには管理者権限は持たせられないのです。

Get( 持続 ID ) は、お恥ずかしい話ですが存在を知りませんでした。
Get( デスクトップパス ) でもデスクトップの名称が複数端末で同一の場合どうしようと思っていたのですが、これで解決ですね。

利用者には「もし途中でクラッシュした場合は同じ端末からしかログインできません」としておいて、
同端末からのアクセスであれば、ログイン情報が残っていても例外的にアクセスを許す、というのを考えていたのですが、
最悪の場合クラッシュからそのまま二度と起動しなくなったり、クラッシュした後にそのまま端末が
廃棄されてしまった場合のことを考えると、Shinさんのアイデアがシンプルかつ安全だと思いました。
これから作ってみようと思います。

Offline

#11 2014-05-13 12:18:56

Traveller
Guest

Re: アカウント名の一覧取得

>異常終了した時に、管理者権限のある人が操作しないといけなくなってしまう
これ、どういう状況なのかな?
異常終了ということ自体よくわかっていないけど。

#12 2014-05-13 13:04:10

Shin
Member

Re: アカウント名の一覧取得

異常終了は、強制終了や、ネットワークの切断などでしょう。クラッシュ・リスタートも含みます。
終了処理が行われないため、接続した状態から偏移できません。
私のアイデアも、その意味では同じなんですが、fms運用でしたら、fmsが暫くしたら切断を検知、少なくともアイドルタイム後には、クライアントを切断してくれるはずです。その際に、fms側でスクリプトをキックできればいいのですが、それができないので、排他を利用するといいかな、というアイデアです。

検証して見ましたが、利用者を把握するところは、うまく動きますね。クラッシュ後の状態も、想定範囲内では大丈夫なようです。

Last edited by Shin (2014-05-13 13:05:20)

Offline

#13 2014-05-13 13:51:53

Traveller
Guest

Re: アカウント名の一覧取得

異常終了とかの経験が無いのですが
クライアント側が強制終了した場合、ホスト側はそのクライアントはまだ接続している
ということになるのでしょうか。試してみましたけどホストファイルも普通に閉じる事
ができますし、クライアントも再度新たにログインできます。
管理者権限がどういうときに必要なのかが分かりません。

#14 2014-05-13 14:17:15

Moz
Member

Re: アカウント名の一覧取得

アカウント名と持続IDのテーブルを作成しておいて、
Get ( アカウント名 ) で検索、持続IDが空欄ならば Get ( 持続 ID ) を設定。

既に持続IDが入っていたらアカウントでログイン中だからダメ。
終了の際に持続IDを空欄にする。

的な簡単な方法は如何でしょうか?(深く考えてなくてすみません)

異常終了で持続ID空欄にできなかった場合に備えて、
上記のテーブルが見られるレイアウトにアクセスできるユーザを限っておけば管理者権限はいらないと思います。

Last edited by Moz (2014-05-13 14:17:48)

Offline

#15 2014-05-13 16:58:22

Shin
Member

Re: アカウント名の一覧取得

そのテーブルそのものを触られることが、支障あるようですよ。
そのテーブルの記録によって課金するので、悪用されれば、複数の端末から同一IDでアクセスが可能となり、無課金アクセスになります。

Offline

#16 2014-05-13 20:19:17

daisuket
Member

Re: アカウント名の一覧取得

Shinさんのおっしゃるように、終了処理がきちんと行えるかどうかがキモなのです。
例えるなら、シャワールームから出てきた人が「使用中」の札を「空室」に戻さなかったがゆえに
あとの人がいつまでもシャワーに入れない感じです。
今回の仕組みは社内で使うものではなく、一度納品したら完全にお客様先で独立して運用されるものなので、
使用中を空室に自由に変えられるとまずい(課金の仕組みそのものが崩壊する)のです。

最終的に解決したら改めてご報告しますが、紆余曲折を経たいま、ウインドウコントロール周りで壁に行き当たっています。

Shinさんの書き込みにある「アカウント管理へアクセスするための専用ウィンドウ」を隠した状態で
永遠にバックグラウンドにしまっておければよかったのですが、どうやらそれは無理みたいなので、
裏に隠してあるウインドウが引っ張り出されたとしても、どこをクリックしても再びウインドウを隠すスクリプトが
動くようにしました。

ウインドウに施した処置としては、

・検索での絞り込み(該当アカウントの1レコードのみ)
・最小限のメニューセットへの切り替え
・クローズボタン不可
・ツールバーの非表示

などですが、ウインドウ最下部の倍率表示の右横にあるツールバーの表示/非表示ボタンは無効にできないようで、
ツールバーが復活させられてしまった上にクイック検索のところをクリックされるとレコード確定状態になってしまう、
というのが今突き当たっている壁です。

ここさえ乗り越えられればおそらく完成なのですが、お知恵拝借できませんでしょうか。

Offline

#17 2014-05-13 20:25:49

daisuket
Member

Re: アカウント名の一覧取得

クイック検索、レイアウト設定でレイアウトごとに無効にできるんですね。
使ったことなかったので知りませんでした。
マッチポンプですみません…。

Offline

#18 2014-05-14 09:14:40

Shin
Member

Re: アカウント名の一覧取得

ツールバーの表示切り替えで、隠す、ロックで、そのボタンはロックされますよ。

Offline

#19 2014-05-20 12:37:54

daisuket
Member

Re: アカウント名の一覧取得

遅ればせながら、解決しましたのでタグをつけさせていただきました。
参考になるかどうかわかりませんが、最終的に以下のような形に落ち着きました。

---------------------------
・本体とは別に、アカウント情報を定義するテーブルAを用意(フィールドは「アカウント名」のみ)
・テーブルAに本体に設定したアカウント設定と同じ情報を定義
・ログイン後、スクリプトトリガでテーブルAの該当レコードに移動させ、ログイン日時を刻む
・ログイン日時を刻んだ後そのままフィールドに入りっぱなしにする(ロック状態を作り出す)
・テーブルAを隠し、いじられないような工夫をする
・他の端末からログインしてきた場合にもスクリプトトリガが働いてログイン日時を刻もうとするが跳ね返される
・そのまま終了させる
---------------------------

本体に対するアカウント設定と同じ情報をテーブルAにも設定してやるという手間はありますが、
テーブルAの該当するレコードをロックするというシンプルかつ原始的な方法なので、
Get( 持続ID )などでの端末情報取得もせずに済みました。
かつ、途中で強制終了があったとしてもロック状態は即解放されるので
(ネットワークの不調が原因になったとしてもPCを再起動すれば解放されるはず)
袋小路にはまることもないと思います。

皆様ありがとうございました。

Offline

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.006 seconds, 9 queries executed - Memory usage: 566.7 KiB (Peak: 587.61 KiB) ]