Forguncy(フォーガンシー)で見積管理システムを作ってみました!(6)
Excel関数もグラフも使えて画面も変更できる、ノンプログラミングWebシステム開発ツール「Forguncy(フォーガンシー)」。
前回に引き続き、見積管理システムを作ります。
↓↓ 前回の記事はこちら ↓↓
今回は、以前作成した簡単な「見積管理システム」にマスターテーブルの編集機能を追加します。
マスターテーブルの編集は、特定のロールに制限をかけたいと思いますので、Forguncyに用意されているアクセス制御について調べてみました。
Forguncyで設定できるアクセス制御には、以下のものがありました。
- データレベルのアクセス制御(フィールドレベル、レコードレベル、新規レコードの作成権限)
- セルのアクセス制御
- ページ表示権限
編集するマスターテーブルは『取引先マスタ』とします。先ずは、テーブル「取引先マスタ」を表示するページ「取引先情報」を新規作成します。

「新規追加」セルのセル型は「ハイパーリンク」、「編集」セルと「削除」セルのセル型は「画像」です。
テーブル「取引先マスタ」のデータを編集するためのページ「取引先マスタ編集」を新規作成します。

「取引先情報」ページのセルの設定は以下です。
- 「新規追加」セル:コマンドは「取引先マスタ編集」の「ポップアップウィンドウの表示」とし、遷移先ページのT15セルに「新規」という値を受け渡します。
- 「編集」セル:コマンドは「取引先マスタ編集」の「ポップアップウィンドウの表示」とし、遷移先ページへのデータ連結設定に「連結データを読み込む」を選択します。
- 「削除」セル:コマンドは「レコードの削除」とします。
「取引先マスタ編集」ページのボタン型セル「登録」のコマンドは以下です。

「マスターページ」のメニューに「取引先情報」を追加し、コマンドに「取引先情報」へのページ遷移を設定します。

これで、ログインユーザーなら誰でも「取引先マスタ」テーブルを編集することができるようになりました。
デバッグ開始を使って、動作を確認します。画面左のメニューから「取引先情報」をクリックし、「新規追加」をクリックします。

「取引先マスタ編集」画面がポップアップ表示します。

各データを入力して、「登録」をクリックします。

データが追加されました。

追加したデータ列の「編集」欄をクリックすると、入力欄にデータが入った「取引先マスタ編集」画面がポップアップ表示します。

表示されたデータを編集して「登録」をクリックします。

データ値が変わりました。

追加したデータ列の「削除」欄をクリックすると、レコード削除を確認するメッセージが表示されます。

確認メッセージの「OK」をクリックすると、レコードが削除されました。

次に、アクセス制御を使って、アクセス権を設定していきます。
先ずは、データレベルのアクセス制御を使ってみます。
「取引先マスタ」テーブルを開き、右ペイン「テーブル設定」の中にある「フィールドレベルのアクセス制御…」をクリックすることで、「フィールドレベルのアクセス制御」画面が表示されます。
今回は以下のように設定します。

- 「フィールドレベルのアクセス制御を有効化する」にチェックを入れます。
- ロールが「部長」であるログインユーザーには全てのレコードに対して、「読み取り」「編集」共に許可します。
- ロールが「リーダー」であるログインユーザーには全てのレコードに対して、「読み取り」とフィールド「取引先名」以外の「編集」を許可します。
- ロールが「部長」「リーダー」以外のログインユーザーには、「読み取り」のみを許可します。
以上の設定で、動作を確認してみます。
ロールが「部長」でも「リーダー」でもないアカウントでログインします。

「編集」欄をクリックし、「取引先マスタ編集」画面からデータを編集して「登録」ボタンをクリックします。

次のようなメッセージが表示されました。

全てのフィールドに対しても同様で、登録データを編集することはできませんでした。
しかし、「新規追加」/「削除」欄をクリックするとレコードの追加/削除はできました。
次に、ロールが「リーダー」であるアカウントでログインします。

「編集」欄をクリックし、「取引先マスタ編集」画面からデータを編集して「登録」ボタンをクリックします。

フィールド「取引先名」を編集することはできませんでしたが、それ以外のフィールドは編集できました。

こちらも、「新規追加」/「削除」欄をクリックするとレコードの追加/削除ができました。
次に、ロールが「部長」であるアカウントでログインします。

「編集」欄をクリックし、「取引先マスタ編集」画面からデータを編集して「登録」ボタンをクリックします。

全てのフィールドが編集できました。

こちらも、「新規追加」/「削除」欄をクリックするとレコードの追加/削除ができました。
以上で、ロールによって編集できるフィールドを指定できることを確認できました。
レコードの追加や削除にも、アクセス権を設定したいと思います。
「取引先マスタ」テーブルを開き、テーブル設定の中にある「新規レコード作成権限…」をクリックすることで、「新規レコード作成権限の条件」の画面が表示されます。
今回は以下のように設定します。

- 「新規レコード作成権限機能を有効化する」にチェックを入れます。
- ロールが「Administrator」であるログインユーザーに、新規レコード作成の許可をします。
以上の設定で、動作を確認してみます。
ロールが「Administrator」以外のアカウントでログインします。

「新規追加」をクリックし、「取引先マスタ編集」画面からデータを入力して「登録」ボタンをクリックします。

次のようなメッセージが表示されました。

「Administrator」以外の全てのログインユーザーに対して同様です。
次に、ロールが「Administrator」であるアカウントでログインします。

「新規追加」をクリックし、「取引先マスタ編集」画面からデータを入力して「登録」ボタンをクリックします。

データが追加されました。

設定した通り、ログインユーザーのロールが「Administrator」である場合のみ、レコードを追加できることを確認できました。
レコード削除の権限については、「取引先マスタ」テーブルを開き、テーブル設定の中にある「レコードレベルのアクセス制御…」をクリックすることで、「レコードレベルのアクセス制御」の画面から設定できます。
今回は以下のように設定します。

- 「レコードレベルのアクセス制御を有効化する」にチェックを入れます。
- ロールが「Administrator」であるログインユーザーには全てのレコードに対して、「表示」「更新」「削除」を許可します。
- ロールが「Administrator」以外であるログインユーザーには全てのレコードに対して、「表示」「更新」を許可します。
以上の設定で、動作を確認してみます。
ロールが「Administrator」であるアカウントでログインします。

「編集」をクリックし、「取引先マスタ編集」画面からデータを編集して「登録」ボタンをクリックします。

次のようなメッセージが表示されました。

「Administrator」に対してレコードレベルの設定では「更新」を許可しましたが、フィールドレベルの設定では「編集」を許可していないため、レコードデータの編集はできませんでした。
「削除」をクリックすると、レコードは削除されました。

次に、ロールが「部長」であるアカウントでログインします。

「編集」をクリックし、「取引先マスタ編集」画面からデータを編集して「登録」ボタンをクリックします。

全てのフィールドデータが編集できました。

「部長」に対してレコードレベルの設定では「更新」を許可し、フィールドレベルの設定では全てのフィールドに「編集」を許可しているため、全てのフィールドデータが編集できました。
「削除」をクリックすると、以下のメッセージが表示され、レコードの削除はできませんでした。

次に、ロールが「リーダー」であるアカウントでログインします。

「編集」をクリックし、「取引先マスタ編集」画面からデータを編集して「登録」ボタンをクリックします。

「取引先名」を編集した場合のみエラーメッセージが表示され、それ以外のフィールドデータは編集できました。

「リーダー」に対してレコードレベルの設定では「更新」を許可し、フィールドレベルの設定では「取引先名」以外のフィールドに「編集」を許可しているため、「取引先名」以外のフィールドデータが編集できました。
「削除」をクリックすると、以下のメッセージが表示され、レコードの削除はできませんでした。

次に、ロールがないアカウントでログインします。

「編集」をクリックし、「取引先マスタ編集」画面からデータを編集して「登録」ボタンをクリックします。

全てのフィールドデータに対してエラーメッセージが表示され、データの編集はできませんでした。
「誰でも」に対してレコードレベルの設定では「更新」を許可していますが、フィールドレベルの設定では全てのフィールドに「編集」を許可していないため、データは編集できませんでした。
「削除」をクリックすると、以下のメッセージが表示され、レコードの削除もできませんでした。

以上、データレベルのアクセス制御を使って、ロール毎にアクセス権を設定することができました。
次に、セルのアクセス制御を使ってみます。
ページ「取引先情報」の「新規追加」セルを選択し、セル型にある「セルのアクセス制御…」をクリックして、「セルのアクセス制御」の画面を表示します。
今回は以下のように設定します。

以上の設定で、動作を確認してみます。
ロールが「Administrator」であるアカウントでログインします。

「新規追加」をクリックし、「取引先マスタ編集」画面からデータを入力して「登録」をクリックします。

データが追加されました。

ロールが「Administrator」以外であるアカウントでログインします。

「新規追加」をクリックしても、何も起こりません。
セルのアクセス制御が機能していることを確認できました。
上記は、セルのアクセス制御の中の「使用可能権限」を利用したため、次は「表示権限」を設定してみます。

以上の設定で、動作を確認してみます。
ロールが「Administrator」であるアカウントでログインします。

「新規追加」をクリックし、「取引先マスタ編集」画面からデータを入力して「登録」をクリックします。

データが追加されました。

ロールが「Administrator」以外であるアカウントでログインします。

「新規追加」セルが表示されていません。
セルの表示権限が機能していることを確認できました。

他に、「ページ表示権限」によるアクセス制御もあります。こちらはページごとに閲覧権限を設定するものです。
試しに、ページ「取引先情報」に「ページ表示権限」を設定してみます。
「ユーザー認証」タブの「ページ表示権限の管理」をクリックして、「ページ表示権限の管理」画面から設定します。
今回は以下のように設定します。

ページ「取引先情報」の表示は、ロールが「Administrator」に限定します。
動作を確認します。
ロールが「Administrator」であるアカウントでログインします。

「取引先情報」画面は表示されます。
ロールが「Administrator」以外であるアカウントでログインします。

「取引先情報」画面を表示することができませんでした。
いかがでしたでしょうか。
テーブルやセル、ページごとに必要に応じてアクセス権を設定することができました。
今後もForguncyに用意されている機能を使って、簡単にアップグレードしてみたいと思います。