Every action user can make on website results in event being sent to server. If event needs to be changed to be able to work from within AJAX request, then new event needs to be created for each wrapped event:
I propose to create a universal wrapper code, e.g. new "wrapForAjax" method in event handler, that would catch all requests to undefined *Ajax events and if original event (after removing Ajax word) exists call it.
As for permissions, then we should check a permissions for a wrapped event and not create a special permission for *Ajax events directly.