网站大量收购独家精品文档,联系QQ:2885784924

Meteor 允许与拒绝.pdf

  1. 1、本文档共2页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Meteor 允许与拒绝

Meteor 允许与拒绝 允许与拒绝 Meteor 的安全系统不需要我们在每次修改数据的时候,在各⾃的函数⾥⾯进⾏⼿动检 查 例如,对于⼀个博客系统,我们常常需要做很多操作,往新帖⼦上添加属性,当发布 帖⼦的时候进⾏特定检查 这些操作都是围绕帖⼦ (post )这个对象进⾏的,所以我 们应该为帖⼦设置⼀个专门的函数进⾏安全检查 但在另⼀⽅⾯,我们又不希望为修改帖⼦或删除帖⼦这些简单的操作编写特定的函 数 我们只需要在这些操作之前,检查⽤户是否有权限就可以了 这时我们就需要⽤ 到允许 (allow )和拒绝 (deny )回调函数 这些回调函数可以⽅便地让我们定义哪些数据可以被修改,哪些可以被删除 另外, 这些回调函数还整合了⽤户系统 (account system ),⽤以判断权限 多个回调函数 我们可以根据需要定义多个允许 allow 回调函数 但是我们只需要其中_⾄少有⼀个 _返回 true 就可以让操作通过验证 当 Post.insert 被调⽤时 (⽆论是在我们 app 的客户端代码调⽤,还是在浏览器控制台调⽤),服务器会逐个运⾏为 insert 设置的 允许 (allow )回调函数,直到其中⼀个返回 true 为⽌ 如果这样的允许回调函数不 存在,服务器就不会允许 insert 操作,并给客户端返回⼀个 403 错误 类似地,我们也可以定义⼀个或者多个拒绝 deny 回调函数 如果其中⼀个回调函数 返回 true,操作就会被取消,并且返回 403 这意味着,⼀个成功的 insert 操作要 求⾄少⼀个返回 true 的允许 allow 回调函数,并且_所有_拒绝 deny 回调函数都返 回 false %= diagram allow_deny, 注:n/e 表⽰该函数没有被执⾏ % 更直观地说,Meteor 从拒绝回调函数开始,然后是 allow 函数,逐⼀执⾏,直到有 ⼀个返回 true 这个模式的⼀个实际例⼦就是,建⽴两个 allow() 允许回调函数,⼀个⽤于检查帖 ⼦是否属于当前⽤户,另外⼀个⽤于检查当前⽤户是否管理员 如果当前⽤户是管理 员,由于⾄少有⼀个回调函数返回 true,那就确保他们可以更新任何帖⼦ 延迟补偿 还记得我们前⾯说过,数据库的可变函数 (例如 .update())使⽤了⼀种延迟补偿 技术 所以,当你尝试从浏览器的控制台删除⼀篇不属于你的帖⼦的时候,你会看到 帖⼦短时间内消失,但马上又会重新出现 这是因为帖⼦并没有真正从后台删除,删 除操作被后台拒绝了 这样的⾏为在控制台上不是问题 (开发者可以随意⽀配数据进⾏开发) 但是,你需 要确保这样的⾏为不会出现在⽤户界⾯上 ⽐如说,你需要确保对于⽤户不能删除的 帖⼦,⽤户不会看到删除键 庆幸的是,你可以在客户端和服务端使⽤⼀样的代码进⾏权限管理 (例如,你可以写 ⼀个 canDeletePost(user, post) 函数,把它放在⼀个共享的 /lib ⽂件夹下 ⾯),这样做通常不需要太多额外的代码 服务端权限 只有来⾃客户端的数据库操作需要被权限系统验证 服务端的_所有_操作都被认定为 安全的,不需要被权限系统验证 这意味着如果你创建了⼀个服务端函数 deletePost,⽽且这个函数可以被客户端执 ⾏,那么任何⽤户都可以删除任何帖⼦了 因此,你可能不想那么做,除⾮你在函数 中也验证⽤户权限 W3Cschool ( )最⼤的技术知识分享与 习平台 此篇内容来⾃于 ⽹站⽤户上传并发布。

文档评论(0)

ldj215322 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档