某些记录而不是 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。但据我所知,只能对整个 GET
、POST
等请求进行限制。所以换句话说,用户可以调用 /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。
您可以从环回文档中获得更多详细信息
我遇到了登录用户可以在类似 CMS 的系统中创建博客帖子的情况。所以他在后端系统中创建了这些帖子。
当该用户位于管理面板的 Blog
页面时,将发送一个 API 请求,如下所示:
/api/blogs?filter={'userid': '100'}
这会获取该用户发布的所有博客帖子。此用户只能查看和编辑他自己的博客文章。
但是如果他将 URL 改成这样:
/api/blogs?filter={'userid': '1'}
然后他可以获得其他用户的博客帖子,我想禁止这样做。
我知道 Loopback 有 ACL。但据我所知,只能对整个 GET
、POST
等请求进行限制。所以换句话说,用户可以调用 /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。
您可以从环回文档中获得更多详细信息