loopbackでAPIにアクセスした際のACLの適用状況を確認する
loopbackで作成したAPIには、ユーザのロールに応じてアクセスコントロールを指定することができます。
Controlling data access - LoopBack - Documentation
例えば、
- adminユーザのみアクセス可
- このロールのユーザのみアクセス可
- 認証済のユーザであればアクセス可
といった様なアクセスコントロールをslcコマンドでscaffoldすることができます。(やっていることはmodelの定義をしているJSONにアクセス権限の設定を付与している)
この設定を簡単にチェックするためにアプリケーションログとして標準出力するにはloopbackアプリケーション指定時に以下の環境変数を指定することで実現できます。
$ DEBUG=loopback:security:acl slc run
といった形でloopbackアプリを起動するとloobackで作成したAPIにアクセスした際にそのAPIへ適用されているアクセスコントロールの適用状況を確認することができます。
例えば RempUser
というモデルがあり、/api/RempUsers/{id}
というエントリポイントに対してユーザ情報を取得するためGETリクエストを発行した場合、発行と同時にアクセスコントロールの適用状況がログとして標準出力に出力されます。
$ http http://localhost:5000/api/RempUsers/1?access_token=pIIxAUP6qn2OtXntEGWO6KxAU71qDSS14A1qZamwTTk2xZEOppdtUVRM3agrdoQ8
といった形でリクエストを発行すると、以下の様なログが出力されます。
loopback:security:acl The following ACLs were searched: loopback:security:acl ---ACL--- loopback:security:acl model RempUser loopback:security:acl property findById loopback:security:acl principalType ROLE loopback:security:acl principalId $owner loopback:security:acl accessType * loopback:security:acl permission ALLOW loopback:security:acl with score: 8016 loopback:security:acl ---ACL--- loopback:security:acl model RempUser loopback:security:acl property * loopback:security:acl principalType ROLE loopback:security:acl principalId $everyone loopback:security:acl accessType * loopback:security:acl permission DENY loopback:security:acl with score: 7495 loopback:security:acl ---Resolved---
この出力を確認することでloopbackが該当のエントリポイントに対してどういった判断が行われてアクセス可/不可の判定を行ったか確認することができます。