Вы находитесь на своем пути. Вот пример кода о том, как разрешать разные пользователи для разных RPC. В реальном случае использования вы, скорее всего, получите переменные users
и rpcs
из базы данных.
Так что теперь каждый раз, когда клиент звонит ds.rpc.make('set-user-data',...
сервер просматривает который разрешение СРП требует ('canEditUser'
) и если пользователь имеет такое разрешение (микрофон: правда, Лайза: ложь)
var DeepstreamServer = require('deepstream.io');
var server = new DeepstreamServer();
var C = server.constants;
var users = {
'mike': { canEditUser: true },
'lisa': { canEditUser: false }
};
var rpcs = {
'set-user-data': 'canEditUser'
};
server.set('permissionHandler', {
isValidUser: function(connectionData, authData, callback) {
if(!authData.username) {
callback('no username specified');
}
else if(users[ authData.username ]) {
callback(null, authData.username);
}
},
canPerformAction: function(username, message, callback) {
var isIncomingRpc = message.topic === C.TOPIC.RPC && message.action === C.ACTIONS.REQUEST;
if(isIncomingRpc) {
var rpcName = message.data[ 0 ];
if(rpcs[ rpcName ] === undefined) {
callback('Unknown RPC ' + rpcName);
return;
}
var userPermissions = users[ username ];
var requiredRpcPermissions = rpcs[ rpcName ];
var isPermissioned = userPermissions[ requiredRpcPermissions ];
callback(null, isPermissioned);
}
}
});
server.start();
Спасибо за ответ и пример! Это полезно. –