LoopBack操作钩子过滤数据
来源:互联网 发布:淘宝图片护盾入口 编辑:程序博客网 时间:2024/06/05 14:33
最近项目使用node.js+LoopBack+mongdb+mysql框架。在权限控制时候需要根据用户的权限去加载其能看到的数据。因此对loopback的操作钩子进行了研究处理。
代码如下:首先在server.js中使用中间件进行用户权限设置的操作。包括其能看到某些id的数据。此处必须在中间件中定义,否则在LoopBack的上下文对象中是得不到req和res数据的。
app.use(function setCurrentUser(req, res, next) {
var loopbackContext = loopback.getCurrentContext();
var adminlogined = req.session.adminlogined || false;
if (adminlogined) {
loopbackContext.set('parkinglotIds', (req.session.adminUserInfo && req.session.adminUserInfo.parkinglotIds));
loopbackContext.set('isadmin', req.session.isadmin || false);
}
else {
loopbackContext.set('parkinglotIds', ["lebo"]);
loopbackContext.set('isadmin', false);
}
next();
});
然后在common中的需要控制数据的表结构的js文件中做如下修改:
var loopback = require('loopback');
module.exports = function (Parkinglot) {
Parkinglot.observe('access', function logQuery(ctx, next) {
var lctx = loopback.getCurrentContext();//此处获得设置的数据
var parkinglotIds = lctx && lctx.get("parkinglotIds");
var isadmin = lctx && lctx.get("isadmin");
//以下代码根据自己需要进行修改
if ((!parkinglotIds) || isadmin || ctx.options.charging) {
next();
}
else {
var i = 0;
var original = null;
for (var name in ctx.query.where) {
i++;
original = ctx.query.where;
}
if (i > 0) {
if (ctx.query.where.and) {
ctx.query.where.and.push({ id: { inq: parkinglotIds } });//如果限制了当前表只能查看某些id的数据。则在此处增加查询条件即可。
}
else {
ctx.query.where = {};
ctx.query.where.and = [];
ctx.query.where.and.push({ id: { inq: parkinglotIds } });
if (original) {
ctx.query.where.and.push(original);
}
}
}
else {
ctx.query.where = {};
ctx.query.where.and = [];
ctx.query.where.and.push({ id: { inq: parkinglotIds } });
}
next();
}
});
};
- LoopBack操作钩子过滤数据
- 过滤钩子驱动程序(2)
- 过滤钩子驱动程序
- Loopback
- MySQL--操作简记(where过滤,通配符过滤数据)
- mysql---使用操作符过滤数据
- 绕过文件系统过滤驱动和钩子
- 钩子与数据分析
- 书写NDIS过滤钩子驱动实现ip包过滤
- 书写NDIS过滤钩子驱动实现ip包过滤
- 书写NDIS过滤钩子驱动实现ip包过滤
- 数据过滤
- WP7 XML操作详解:读取,过滤以及数据绑定
- WP7的XML操作详解:读取,过滤以及数据绑定
- C# 中的XML操作详解:读取,过滤以及数据绑定
- atitit.软件开发概念--过滤和投影 数据操作
- atitit.软件开发概念--过滤和投影 数据操作
- 使用CoreData查询数据:谓词过滤,排序操作
- JSON的解析
- BOM和DOM详解
- HDU 5670 Machine
- 75. Sort Colors
- Android4.0运行含有Toolbar的项目出错
- LoopBack操作钩子过滤数据
- nrf51822 --- 1拖8实验(1)
- 函数声明中地址引用的作用
- Go语言为什么这么流行?
- 购物车中计算checkBox选中总价功能的实现
- js substring()字符串截取函数
- Naive Bayes
- Root Mean Squared Error (RMSE)
- 证书 描述文件的安装