当用户创建一个房间时,该用户是否给出了某种标识符,可用于在房间内为他们提供特殊/单独的功能?
我正在考虑一种跟随领导者类型的场景,其中房间创建者是唯一可以影响该页面的场景。
(我认为这可以通过正式的用户身份验证轻松完成,但我很好奇开箱即用的事情。)
答案 0 :(得分:2)
目前无法确定哪个用户首先加入了会议室。目前,执行此操作的唯一方法是使用JWT来标识哪些用户是其组的领导者或关注者。
然后,您可以利用我们的ACL's来确保只有领导者才能修改某些数据。要检索用户组,您可以调用相关用户密钥来显示应用程序中的相应视图。
在我们的路线图中,能够从ACL中的键读取组和用户信息,这意味着当用户加入房间时,他们可以执行覆盖为false的集合。如果没有其他用户设置密钥,他们将自动成为该组的成员。
如果您不担心正确的用户身份验证,可以通过利用set overwrite来确定用户。以下是一个例子:
var leaderKey = room.key('leader');
function acquireLeader (cb) {
leaderKey.set(user.id, { overwrite: false, cascade: room.self() }, function (err) {
if (err instanceof goinstant.errors.CollisionError) {
return cb(null, false); // someone else is the leader
} else if (err) {
return cb(err); // something else went wrong
}
cb(null, true);
});
}
room.join(function(err) {
if (err) {
throw err;
}
acquireLeader(function(err, isLeader) {
if (err) {
throw err;
}
console.log('are you the leader?', isLeader);
leaderKey.on('remove', function (value, context) {
acquireLeader(function(err, isLeader) {
console.log('did you acquire leader?', isLeader);
});
});
});
});
上述杠杆设置覆盖和密钥级联,以确保用户加入房间时他们试图成为领导者。如果他们的密钥没有值,则他们的用户ID存储在领导者密钥中。如果密钥已经有值,那么其他人就是领导者。
当用户离开房间时,将删除领导者密钥,然后再次进行领导选举。意味着有人永远是领导者!