某些记录而不是 API URL 的 ACL

ACL on certain records instead of API URLs

我遇到了登录用户可以在类似 CMS 的系统中创建博客帖子的情况。所以他在后端系统中创建了这些帖子。

当该用户位于管理面板的 Blog 页面时,将发送一个 API 请求,如下所示:

/api/blogs?filter={'userid': '100'}

这会获取该用户发布的所有博客帖子。此用户只能查看和编辑他自己的博客文章。

但是如果他将 URL 改成这样:

/api/blogs?filter={'userid': '1'}

然后他可以获得其他用户的博客帖子,我想禁止这样做。

我知道 Loopback 有 ACL。但据我所知,只能对整个 GETPOST 等请求进行限制。所以换句话说,用户可以调用 /api/blogs 也可以不调用

在这种情况下,我希望用户能够调用 API url。但是我想禁止查看某些记录。

我应该如何在环回中以动态方式处理这种情况?

如果我完全理解你的意思,你的问题可以通过 'remote methods' 和 'remote hooks' 来解决。

module.exports = function (Blog){

    Blog.getBlogs = function(userid, cb){
        // Db operation.
        // Fetch blogs by userid.
        cb(null, blogs);
    };

    Blog.remoteMethod('getBlogs', {
        accepts: {arg: 'userid', type: 'number'},
        returns: {arg: 'blogs', type: 'object'}
    });

    Blog.beforeRemote('getBlogs', function(ctx, unused, next) {
        if(ctx.req.accessToken) {
            // Fetch user id by accesToken
            // Compare user id's
            next();
        } else {
            next(new Error('You are not allowed to get these messages'))
        }
    });
}

因为你定义了远程钩子,所以它可以在执行之前检查一些东西。您可以获得与访问令牌相关的用户 ID。然后比较从参数中获取的用户 ID 和传入的用户 ID。

您可以从环回文档中获得更多详细信息

  1. Remote methods
  2. Remote hooks