如何使用策略筛选Sails.js蓝图查询
How can I filter Sails.js blueprint queries using a policy?
我有一个isAuthorized
策略,如果用户被授权对给定的模型和模型实例执行给定的操作,该策略将返回true。
有没有办法将此策略应用于蓝图路由,例如,对file
的GET请求只返回允许当前用户执行findOne
的文件?
同样,这个相同的策略是否可以应用于蓝图填充结果,从而在填充的数组中只返回一些用户的关联文件?
为了做到这一点,我目前正在覆盖每个控制器中的find
操作,这不是理想的。如果它可以在不破坏蓝图路线/行动的情况下使用政策来应用,那将是非常棒的。
在我的sails权限模块中,我覆盖sails.js response
类型,以便控制器只使用允许用户访问的模型进行响应。
参见:
- 超控响应:https://github.com/tjwebb/sails-permissions/blob/master/api/policies/PermissionPolicy.js#L58
- 筛选结果:https://github.com/tjwebb/sails-permissions/blob/master/api/policies/PermissionPolicy.js#L86-L90
这是帆的一部分,也许是一个新功能?
http://sailsjs.com/documentation/concepts/policies#?using-政策与蓝图行动
{
UserController: {
find: ['isAuthorized', 'filterByUserId'],
findOne: ['isAuthorized', 'filterByUserId']
}
}
api/policies/filterByUserId.js
module.exports = function filterByUserId(req, res, next) {
if ( req.session.user ){
// Use existing req.options.where, or initialize it to an empty object
req.options.where = req.options.where || {};
// Set the default `userId`
req.options.where.id = req.session.user.id;
}
//safe to do if isAuthorized policy is enforced in tandem.
return next();
}
相关文章:
- 如何处理node.js节点mongodb中的连接和查询队列
- 在node.js-mysql中执行UPDATE查询不起作用
- 更新从Mysql查询检索到的数据?Node.js节点mysql
- 如何在mysql查询(NODE.js)中重复使用一个参数
- 基于js点击的多个php查询
- Node.js和Mongoose返回2D查询
- 如何在不重新加载URL的情况下查询Node.Js的后端并更新页面
- 使用JS或新查询对列表进行排序
- 如何将select查询传递给js
- 如何使用 JS (Node.js) 防止 HTTP 查询中允许使用 UTF8 字符串
- 如何在 node.js 中查询 redis 中的值
- 使用Undercore.js查询数组
- 使用qunit.js查询事件回调测试
- Waterline ORM(sails.js)“;其中或“;在查询中
- SQL应该查询's ORDER BY列写入JS代码中
- 布尔查询参数被 Sails.js 视为字符串
- 基于媒体查询的angular js动画无法调整窗口大小
- 查询.js和 Chrome 打印对话框 issu
- 通过猫鼬和节点_id进行简单查询.js不起作用
- 匹配媒体和查询js之间的区别