1. FM Paradise
  2. 特集
  3. 権限(アクセス権)管理事情~実践~

権限(アクセス権)管理事情~実践~

今回は、前回権限(アクセス権)管理事情~基本~の続きで、実例を紹介していきたいと思います。

アクセス権セットは一つでいい?

前回権限(アクセス権)管理事情~基本~でも紹介しましたが、アクセス権セットの設定を複雑にしません。特にフィールドのアクセス権はユーザーが基本的に触れないものについては、制限をすることがありますが、基本的にはFileMakerのデフォルトにある「データ入力のみ」というアクセス権をコピーして、多少アレンジして使います。

アレンジとは、その他のアクセス権の欄で、印刷を許可、エクスポートを許可などの部分を多少いじるくらいです。

アクセス権セットの管理

また、このアクセス権セットの管理では、利用できるメニューコマンドという部分を「最小値」にしておくといいでしょう。ウィンドウ上部にメニュー表示が出ますが、ほとんど何もできなくなります。Appの動作に影響を及ぼすことはほぼできなくなります。アクセス権セットの編集、その他のアクセス権で「エクスポートを許可」についてはチェックを外しておいてもいいかもしれません。

ツールバーは見せない

多人数で使用する業務アプリを作成する場合、ファイルメーカーのデフォルトの機能を直接操作できるような、ツールバーやウィンドウ上部に出るメニューは表示させないようにするのが基本です。直接送されると何かと不都合が生じる場合もあります。メニューに関しては、前述したアクセス権セットの管理でほぼ問題はないでしょう。

次に問題となるのが、「ツールバー」です。

ツールバー

これも消しておきたいところです。スクリプトで簡単に表示を切り替えることができます。

ツールバーの切り替え スクリプトステップ

このスクリプトで切り替えることができます。また、ロックすることで、ユーザー自身が切り替えることを防ぐことができますので、できればしておいた方がいいでしょう。

またスクリプトトリガOnFirstWindowOpenを使って、このスクリプトを実行すれば、起動時に必ず作動して、ツールバーを隠すことができます。

部長にしか見えないボタン、フィールド

「新規レコード作成」「レコードの削除」など、レコードの操作は、Appに切っては切れない縁があります。特にこの二つは権限によって制限をさせたい最も基本的な部分ではないでしょうか。

部長は、レコード削除ができるけど、他の人はできない。これを実現するには、ボタンを配置して、それにレコードを削除ステップを含むスクリプトを設定してこのボタンに下記の図のようにインスペクタで「次の場合にオブジェクトを隠す」の部分に計算式で制御します。

インスペクタ 次の場合にオブジェクトを隠す

この例は、グローバル変数を使って、このアカウントの権限は何なのかを記録しています。この変数は起動時にアカウントに応じて設定しておきます。この変数を参照することによって、ボタンの表示などを選択します。

見ていいレコードは検索で探せ

多人数で使用するAppでは同じテーブルのレコードでも、人によって、このレコードは見せてもいいけど、あちらはダメ、というようなすみわけをさせたい場合があります。

これをアクセス権セットの管理だけで、実現しようとするとあまりよろしくありません。なぜなら、この機能だけを使って行おうとすると、見せられないレコードには「アクセス権がありません」といったような表示がされます。使っている人はどう思うでしょうか。決していいことでないことはお分かりいただけると思います。

制御したいレコードがあるレイアウトに移動する際には、必ず検索がかかるようにして、表示するレコードを変えるようにします。

検索スクリプト、レイアウト移動、検索実行、フィールド設定

このようにしておけば、見せたくない他部署の売上は見せることがなくなります。ポイントとしては、エラー処理を追加しておくことです。これがないと、検索条件に合うレコードがない場合、すべてのレコードが表示されてしまう危険もあります。

カスタムメニューも

場合によってはカスタムメニューも取り入れていきましょう。

カスタムメニューは、上部メニューをカスタマイズすることのできる機能で、使いこなせるようになれば非常に便利ですが、少々複雑な面もあるので、状況に応じて使っていくといいのではないでしょうか。

スクリプトでの注意

グローバル変数で制御をする場合、ごくごくまれにこの変数が空になってしまう場合がるようです。非常にまれで、あまり経験があるわけではありませんが、こういう状況があるというのは知っておいた方がいいかもしれません。これに備えるのであれば、変数が空かどうかをチェックして、空の場合、再度変数を設定するようにしておいた方がいいでしょう。