【发布时间】:2019-05-31 17:51:02
【问题描述】:
我在Meteor.users 集合中有我的扩展用户模型,我将大部分字段从该集合发布到客户端。每个用户都有一个isAdmin 字段,默认设置为false。
现在我有两个问题,它们是相互关联的:
如果
Meteor.users集合中的isAdmin字段设置为true,如何确保只能呈现用于管理员的组件?如何确保不能从客户端控制台修改
Meteor.users集合上的isAdmin字段?
关于1.
我很犹豫是否将此字段发布给客户端,只是在客户端评估isAdmin。
我不确定控制台是否有一些骇人听闻的方式来简单地更改isAdmin 以允许呈现仅适用于 上的管理员的组件(或其中的一部分)客户。例如,我可以想象Object.defineProperty() 可以这样做。
我应该使用
server-side rendering来保护我的用户界面的管理部分吗?
关于2.
考虑一下article 中关于个人资料编辑 的第一段关于常见错误的内容。这表明 isAdmin 可以通过从控制台调用 Meteor.users.update(Meteor.userId(), {$set: {'isAdmin': true}}) 轻松地从客户端更改。
当我运行它并登录到我的应用程序时,我得到了update failed: Access denied。
但是即使官方文档还是建议添加
// Deny all client-side updates on the Lists collection
Lists.deny({
insert() { return true; },
update() { return true; },
remove() { return true; },
});
https://guide.meteor.com/security.html#allow-deny
有一个answer,表明只要确保Meteor.methods 是服务器专用的,只需检查服务器端的isAdmin 属性就足够了。但它根本不谈论allow-deny,它已经6岁了。
谁能告诉我,今天的真实情况如何?
【问题讨论】:
标签: security meteor meteor-accounts meteor-methods