2017-10-20 2 views
0

私はドキュメントでそれを行う方法が見つからず、ここでもStack Overflowを調べました。ユーザーがログインする前に、APIからのJSONレスポンスの制限されたビューを表示したいとします。認証が提供されていないとき、Loopbackからの制限応答を取得する

例として、私はオンラインで販売したい電子書籍を持っています。私は、ログインしていないときに本のプレビューリンク(epubFile.notAuthoried)とログインしたときにその本の完全リンク(epubFile.authorized)を表示するようにします。どちらのリンクも同じテーブルに表示されます。

[ 
    { 
    "title": "string", 
    "subTitle": "string", 
    "isPublished": true, 
    "publicationDate": "2017-10-20T11:07:31.258Z", 
    "epubFile": { 
     "notAuthorized": "filename-noauth.epub" 
     "authorized": "filename-auth.epub" 
    } 
    "id": "string", 
    "createdOn": "2017-10-20T11:07:31.258Z", 
    "updatedOn": "2017-10-20T11:07:31.258Z" 
    } 
] 

ループバックのAPIエンドポイントからフィールドを除外することは可能ですか? 新しいカスタムAPIエンドポイントを作成する必要はありますか?

答えて

2

{  
    "name": "eBook", 
    "base": "PersistedModel", 
    [...] 
    "acls": [ 
    "accessType": "READ", 
    "principalType": "ROLE", 
    "principalId": "$everyone", 
    "permission": "ALLOW", 
    "property":["find", "findById] 
    ] 
} 

次それらを呼び出すことができ、リモートにフックする必要があります両方の許可および権限のないユーザーようにするために、最初にあなたが$皆様にごfindfindByIdメソッドにアクセス許可を設定する必要がありますHTEのユーザーがログインしているか、私はまだループバックではほとんど初心者だという理由だけではない

const previewProperites = ['title', 'subTitle', etc...] 
Ebook.afterRemote('find', (ctx, ebooks, next) => { 
    // pseudo code 
    if(!ctx.options.accessToken){ 
    // no user logged in, only keep preview properties 
    ebooks.forEach(book => { 
     // get the properties of the book 
     var eBookProperties = Object.keys(book.__data); 

     eBookProperties.forEach(bookProp =>{ 
     if(!previewProperties.some(pProp => pProp === bookProp)){ 
      // ebook property not in preview list, so remove it 
      delete book.__data[bookProp]; // .__data is where loopback keeps its actual data 
     } 
     }); 
    }); 
    } 
    next(); 
} 
+0

は、フックは、正しい共通/モデルの下ebook.jsに配置されている場合の方法や変更は、応答がに応じて? 明日、感謝のために@ YeeHaw1234答えをお試しになりますし、文章訂正のための文章訂正のためにありがとうございます:) – NIKRI

+1

あなたのebook.jsファイルにコードを入れることができますが、フォルダ(/ common/models/ebook /)を作成し、各ビットの.jsファイル(/ebook/hidePropertiesForPreview.js)を作成する場合は、コードをきれいにしておいてください。次に、ebook.jsファイルで、この新しい.jsファイルを要求し、それを呼び出します – YeeHaw1234

関連する問題