我想允许根据用户属性添加和删除我的Meteor集合。
这就是我设置管理员用户的方式:
if (Meteor.isServer) {
if (Meteor.users.find().count() === 0) {
Accounts.createUser({
username:'Greg',
password:'default',
isAdmin: 1
});
}
}
我现在想让每个使用isAdmin = true的用户通过Accounts.createUser创建另一个用户:
Meteor.methods({
makeUser: function(attributes) {
var user = Meteor.user();
if (user.isAdmin)
Accounts.createUser(attributes)
else
console.log('User ' + user.username + ' created a player.')
}
})
永远不会创建用户,就好像user.isAdmin永远不等于true。我究竟做错了什么?这与发布和订阅有关吗?目前我仍然打开了自动发布。
答案 0 :(得分:2)
将标记isAdmin
添加到个人资料对象:
Accounts.createUser({
username:'Greg',
password:'default',
profile:{
isAdmin: 1
}
});
请参阅docs
Accounts.createUser
方法允许仅向用户对象添加字段username
,password
,email
和profile
。
Meteor.methods({
makeUser: function(attributes) {
var user = Meteor.user();
if (user.profile && user.profile.isAdmin)
Accounts.createUser(attributes)
else
console.log('User ' + user.username + ' created a player.')
}
})
考虑使用包roles。
答案 1 :(得分:0)
在这种情况下,普通用户仍然可以拨打Accounts.createUser
并完全绕过您的makeUser
来创建用户,我认为这不是您希望看到的行为。
我建议使用来自@Kuba Wyrobek的isAdmin逻辑来包装Accounts.onCreateUser
:
// server side
Accounts.onCreateUser(function(options, user) {
user.profile = options.profile ? options.profile : {};
if (user.profile && user.profile.isAdmin) {
return user;
} else {
throw new Meteor.Error(403, "Forbbiden");
}
});