2017-10-20 110 views
0

我找不到在文档中执行此操作的方法,并且我也在这里查看了Stack Overflow。我想在登录之前向用户展示我的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

首先你必须设置你的findfindById方法的权限,达到人人都这样既授权和未授权的用户可以打电话给他们

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

接下来,你就必须挂钩到远程方法和修改响应取决于如果兴田用户登录或不

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的答案,并感谢关于文本halfer的文法更正:) – NIKRI

+1

您可以将代码放入ebook.js文件中,但我们发现它更容易如果您创建一个文件夹(/ common/models/ebook /),则保持代码清洁,并为每个功能位(/ebook/hidePropertiesForPreview.js)创建一个.js文件。然后,在你的ebook.js文件中,需要这个新的.js文件并调用它 – YeeHaw1234

相关问题