2016-03-22 6 views
0

Интересно, предоставляет ли deepstream готовое к использованию решение, чтобы сделать конечные точки частным/общедоступным. Если мне не интересно, как я могу отслеживать правильные вызовы на стороне сервера, чтобы разрешить только определенные конечные точки? Я считаю, что мне нужно разрешение providerHandler, которое реализует canPerformAction и проверяет, является ли это требуемым авторизацией вызова RPC и правильно ли разрешен вызывающий абонент. Правильно ли это? Я смотрю документацию и понимаю, что меня интересует тема P, но я не знаю, что нужно для проверки. https://deepstream.io/docs/constants.htmlОграничить доступ к конечным точкам RPC

Заранее благодарен!

ответ

1

Вы находитесь на своем пути. Вот пример кода о том, как разрешать разные пользователи для разных 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(); 
+0

Спасибо за ответ и пример! Это полезно. –