【问题标题】:Restrict access to RPC endpoints限制对 RPC 端点的访问
【发布时间】:2016-03-22 23:49:48
【问题描述】:

我想知道 deepstream 是否提供现成的解决方案来使端点成为私有/公共。如果不是我想知道如何在服务器端跟踪正确的深度流调用以仅允许某些端点?我相信我需要提供实现 canPerformAction 的 permissionHandler 并检查它是否是需要授权的 RPC 调用以及调用者是否正确授权这样做。这是正确的想法吗?我正在查看文档并了解我对主题 P 感兴趣,但我不知道要检查的正确操作是什么。 https://deepstream.io/docs/constants.html

提前致谢!

【问题讨论】:

    标签: deepstream.io


    【解决方案1】:

    你的方法很到位。这是一个关于如何为不同的 RPC 授予不同用户权限的代码示例。在实际用例中,您很可能会从数据库中获取变量 usersrpcs

    所以现在每当客户端调用 ds.rpc.make( 'set-user-data',... 时,服务器都会查找 rpc 需要的权限 ('canEditUser') 以及用户是否拥有该权限(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();
    

    【讨论】:

    • 感谢您的回复和示例!这很有帮助。
    猜你喜欢
    • 2016-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-30
    • 1970-01-01
    • 1970-01-01
    • 2013-07-26
    • 1970-01-01
    相关资源
    最近更新 更多