アクセスの制御
このフレームワークでは、access システム属性を介して、アプリケーション、インターフェース、コンポーネント、属性、イベントへのアクセスを制御できます。access システム属性は、リソースをその名前空間外で使用できるかどうかを示します。
access システム属性は次のタグで使用します。
- <aura:application>
- <aura:interface>
- <aura:component>
- <aura:attribute>
- <aura:event>
アクセス値
access システム属性には、次の値を指定できます。
例
次のサンプルコンポーネントにはグローバルアクセス権があります。
1<aura:component access="global">
2 ...
3</aura:component>アクセス違反
アクセスを許可する access システム属性のないコンポーネントや属性などのリソースにコードがアクセスすると、そのコードは実行されないか、undefined が返されます。また、デバッグモードを有効にした場合は、ブラウザコンソールにエラーメッセージが表示されます。アクセス権チェックの適用は、今回のリリースの重要な更新です。この更新を行わなければ、ブラウザコンソールにエラーメッセージではなく警告メッセージが継続的に表示されます。
アクセス権チェックエラーメッセージの構造
アクセス違反のアクセス権チェックエラーメッセージのサンプルを次に示します。
1Access Check Failed ! ComponentService.getDef():'markup://c:targetComponent' is not visible to 'undefined'.エラーメッセージは、次の 4 つの部分で構成されます。
- コンテキスト (誰がリソースにアクセスしようとしているか)。この例では、undefined です。
- 対象 (アクセスされているリソース)。この例では、markup://c:targetComponent です。
- エラーの種類。この例では、not visible です。
- エラーをトリガしたコード。通常はクラスメソッドです。この例では、対象定義 (コンポーネント) にアクセスできなかったことを示す ComponentService.getDef() です。定義には、コンポーネントなどのリソースのメタデータが記述されます。
アクセス権チェックエラーの修正
アクセス権チェックエラーは、次の 1 つ以上の方法を使用して修正できます。
- 所有するリソースに適切な access システム属性を追記する。
- 使用できないリソースへの参照をコードから削除する。
- アクセスしている属性が存在し、大文字小文字の区別も含め正しいスペルを使用していることを確認する。
アクセスコンテキストでは属性が未定義であるか非公開であるかを判断できないため、未定義属性にアクセスした場合と非公開属性にアクセスした場合とは同じアクセス違反メッセージがトリガされます。
-
$A.getCallback() を使用して、setTimeout() または setInterval() コールや ES6 Promise の場合のように通常の表示ライフサイクル外のコンポーネントにアクセスするコードをラップする。
$A.getCallback() では、現在の実行コンテキストが保持され、非同期コードに正しいアクセスレベルが付与されます。それ以外の場合は、フレームワークでコンテキストが失われ、グローバルリソースへのアクセスのみが許可されます。