{"action":"created","issue":{"url":"https://api.github.com/repos/tavendo/WAMP/issues/181","labels_url":"https://api.github.com/repos/tavendo/WAMP/issues/181/labels{/name}","comments_url":"https://api.github.com/repos/tavendo/WAMP/issues/181/comments","events_url":"https://api.github.com/repos/tavendo/WAMP/issues/181/events","html_url":"https://github.com/tavendo/WAMP/issues/181","id":104617455,"number":181,"title":"caller black/white listing","user":{"login":"konsultaner","id":2699538,"avatar_url":"https://avatars.githubusercontent.com/u/2699538?v=3","gravatar_id":"","url":"https://api.github.com/users/konsultaner","html_url":"https://github.com/konsultaner","followers_url":"https://api.github.com/users/konsultaner/followers","following_url":"https://api.github.com/users/konsultaner/following{/other_user}","gists_url":"https://api.github.com/users/konsultaner/gists{/gist_id}","starred_url":"https://api.github.com/users/konsultaner/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/konsultaner/subscriptions","organizations_url":"https://api.github.com/users/konsultaner/orgs","repos_url":"https://api.github.com/users/konsultaner/repos","events_url":"https://api.github.com/users/konsultaner/events{/privacy}","received_events_url":"https://api.github.com/users/konsultaner/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/tavendo/WAMP/labels/Advanced%20Profile","name":"Advanced Profile","color":"eb6420"},{"url":"https://api.github.com/repos/tavendo/WAMP/labels/Enhancement","name":"Enhancement","color":"009800"},{"url":"https://api.github.com/repos/tavendo/WAMP/labels/Needs%20discussion","name":"Needs discussion","color":"006b75"}],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":3,"created_at":"2015-09-03T04:06:23Z","updated_at":"2015-09-03T07:21:20Z","closed_at":null,"body":"As a counterparts to the subscriber black/white listing there should be the same possibility for callers. \r\n\r\nThere are different ways to achieve that result with available advanced features like caller_identification and the session_meta api. But as discussed in the issue #134 this will end up in a huge message overhead when it comes to a distribued system of multiple routers and business-logic clients.\r\n\r\nIf you take a look at a MVC framework which basicly only provides RPCs, the Router is responsible for filtering requests by authroles/sessionIds. The method (callee) itself is not deciding wether a session/authrole is allowed to execute it.\r\n\r\nAs the business logic is inside the callee, it should now about who is allowed to call it, but it should propagate its availability to the router to somehow follow the [uniform access princible](https://en.wikipedia.org/wiki/Uniform_access_principle) and reduce message overheads.\r\n\r\nThats why I would love to see this in the specs:\r\n\r\n    REGISTER.Options.exclude|list\r\n    REGISTER.Options.eligible|list\r\n    REGISTER.Options.exclude_authid|list\r\n    REGISTER.Options.eligible_authid|list\r\n    REGISTER.Options.exclude_authrole|list\r\n    REGISTER.Options.eligible_authrole|list\r\n\r\n"},"comment":{"url":"https://api.github.com/repos/tavendo/WAMP/issues/comments/137358350","html_url":"https://github.com/tavendo/WAMP/issues/181#issuecomment-137358350","issue_url":"https://api.github.com/repos/tavendo/WAMP/issues/181","id":137358350,"user":{"login":"konsultaner","id":2699538,"avatar_url":"https://avatars.githubusercontent.com/u/2699538?v=3","gravatar_id":"","url":"https://api.github.com/users/konsultaner","html_url":"https://github.com/konsultaner","followers_url":"https://api.github.com/users/konsultaner/followers","following_url":"https://api.github.com/users/konsultaner/following{/other_user}","gists_url":"https://api.github.com/users/konsultaner/gists{/gist_id}","starred_url":"https://api.github.com/users/konsultaner/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/konsultaner/subscriptions","organizations_url":"https://api.github.com/users/konsultaner/orgs","repos_url":"https://api.github.com/users/konsultaner/repos","events_url":"https://api.github.com/users/konsultaner/events{/privacy}","received_events_url":"https://api.github.com/users/konsultaner/received_events","type":"User","site_admin":false},"created_at":"2015-09-03T07:21:20Z","updated_at":"2015-09-03T07:21:20Z","body":"I renamed it.\r\n\r\nAs you might have recognized, I'm in the middle of a WAMP-Integration that uses distributed/scaleable peers. I need to avoid synchronization in this scenario to/and reduce message overheads. Because I need really high performance.\r\n\r\nThe structure is:\r\n\r\n    BrowserClient <--> Router <--> BusinessLogicClient\r\n                         ||\r\n                     AuthServer\r\n\r\n**Scenario with the current WAMP specs:**\r\nBrowserClient authenticates and receives a sessionId stored to one of n routers. The BrowserClient now calls a RPC. Neither the callee nor the router do know wether the caller is allowed to receive an answer, because the callee does not know the callers authrole and the router has no ability to filter by authrole. caller_identification needs to be turned on. The callee has to ask the router for the callers role by using the session_meta_api. Which cost 2 extra messages and some more bytes for the caller_identification for every call. An optimization would be to store the session-role-association once the callee had send a call. This would cause a state in the clients that should be avoided for scaleable systems.\r\n\r\n**Scenario with caller blacklisting as discribed:**\r\nThe callee registers the remote procedure to one of n router excluding a role. BrowserClient authenticates and receives a sessionId stored to one of n routers. The BrowserClient does a rpc without having that role. The router would instandly deny the request and safe 4 Messages (Invocation,2xSessionMetaApi,Error to Router). If the router was a router the callee did not registered to, the router could forward the message to another router that has a registration. But this is another story."}}