Webプロセスにおいて 、悪意のあるアクセスや未承認のユーザーからリソース (データ + ビジネスロジック) をワンクリックで保護する方法をご紹介します。
開発モードでは、Restrict access by default (デフォルトでアクセスを制限する) プロパティを FALSE に設定することで、データの使用や関数の呼び出しを制限することなく、コードの構成、データモデル、Qodly ページのアーキテクチャー、やテストに集中することができます。
ユーザープロファイルを実装する準備ができたら、このRestrict access by default プロパティを TRUE に設定するだけで、明示的に許可されていない限り、誰もあなたのデータやビジネスロジックにアクセスできないことを保証できます。
概要
4D 20 以降、4D は未承認ユーザーからリソース (データ + ビジネスロジック) を保護するための、 強力で完全にカスタマイズ可能なシステムを提供しています。
このシステムは、カスタマイズ可能な粒度レベルを提供し、セッション内の権限の存在に基づいています。権限は、roles.jsonファイルで設定し、特定のリソース (データクラス、属性、関数) に対して特定のアクション (読み取り、作成、…) を実行する許可を与える必要があります。
権限は、スケーラブルWebセッションを使用する Webプロセス (REST リクエスト、リモートデータストア、Qodly アプリなど) に適用されます。
ユーザーがアプリケーションに入ることを許可されたとき、認証の実装によって適切な権限をセッションに付与する必要があります。
その後、アプリケーションが Webクエストを受信すると、セッション内の権限の有無に関してチェックが行われ、許可されたアクションのみが実行可能となります。
リソースに対するアクションが許可されていない場合は権限エラーが発生します。
デフォルトのアクセス制限プロパティ
4D 21 では、roles.jsonファイルで新しいブール型プロパティ restrictedByDefault が利用可能になりました。
このプロパティにより、以下のリソースに対する Webアクセスに関するデフォルトの挙動を設定することができます:
これは、パーミッションが設定されていないリソースにのみ影響します。
FALSEの場合: リソースはデフォルトでアクセス可能です
別途パーミッションを設定しない場合、Create、Read、Update…のアクションですべてのリソースがアクセス可能です。
パーミッションを設定している場合、パーミッション設定のないリソースについてのみ、すべてアクセス可能なままになります。
TRUE の場合: デフォルトでリソースへのアクセスが制限されます
別途パーミッションを設定しないかぎり、どのリソースにもアクセスできません。
パーミッションを設定している場合、パーミッション設定のないリソースについては、アクセス不可のままです。
Qodly の “Roles and Privileges” インターフェース
Qodly studioの Roles and privilegesインターフェースは、アプリのパーミッションを設定するためのユーザーフレンドリーな UI を提供します。この UI では、Restrict access by default プロパティを更新することができます。

以前の 4Dバージョン
アプリケーションを以前の 4Dバージョンで実行している場合は、restrictedByDefault が FALSE に設定されているのと同等です。データストアに対してすべての全アクションの実行を許可する all 権限を作成することで、同様のセキュリティレベルを得ることができます。
そして、この all 権限をどのユーザーにも決して与えないようにします。

新しいプロジェクトを開始する場合
新しいプロジェクトを作成すると、roles.jsonファイルは次のように設定されます:

restrictedByDefault が False であるため、このまま新しい開発を開始することができます。制限に妨げられることなく、コード、フォームのデザイン、関数の呼び出しに集中し、データにアクセスすることができます。
ベストプラクティス
最適なセキュリティのために、ユーザープロファイルを実装する準備ができたら、 restrictedByDefault プロパティを True に設定し、以下のことを確実にするために権限を設定することをお勧めします:
– リソースが外部の悪意のあるアクセスから保護されていること
– 各ユーザーに対し、許可されたデータに対して承認されたアクションのみを実行する権限が与えられていること
例
以下の例では、データモデルは次のようになっています:

roles.jsonファイルでは:

その結果:
– SecretInfos データクラスへのアクセスは(読み取り、作成、更新などすべて)不可能です
– Peopleデータクラスを読み取るには viewPeople権限が必要で、Peopleデータクラスに対するその他のアクションは許可されません。
付属の HDI はこれを実証しています。
正確かつ適切なユーザープロファイルを処理しながら、アプリケーションとデータを保護するために、パーミッションの設定をお急ぎください。
