2016-03-22 5 views
0

Ich frage mich, ob Deepstream eine fertige Lösung bietet, um Endpoints privat/öffentlich zu machen. Wenn nicht, frage ich mich, wie ich richtige Deepstream-Aufrufe auf der Serverseite verfolgen kann, um nur bestimmte Endpunkte zuzulassen? Ich glaube, ich muss Provider permissionHandler, der canPerformAction implementiert und prüfen, ob es ein RPC-Aufruf benötigt, Berechtigung und ob ein Anrufer berechtigt, dies zu tun. Ist das richtig Denken? Ich schaue mir die Dokumentation an und verstehe, dass ich an Thema P interessiert bin, aber ich weiß nicht, was eine richtige Aktion ist. Einschränken des Zugriffs auf RPC-Endpunkte

Vielen Dank im Voraus!

Antwort

1

Sie sind mit Ihrem Ansatz genau richtig. Im Folgenden finden Sie ein Codebeispiel zur Berechtigung verschiedener Benutzer für verschiedene RPCs. In einem realen Anwendungsfall würden Sie höchstwahrscheinlich die Variablen users und rpcs aus einer Datenbank erhalten.

So, jetzt, wenn ein Client ruft ds.rpc.make('set-user-data',... der Server sucht die Erlaubnis der rpc ('canEditUser') erfordert und wenn der Benutzer diese Berechtigung hat (mike: true, lisa: false)

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

Dank für Ihre Antwort danken und Beispiel! Dies ist hilfreich. –

Verwandte Themen