Ваша идея ясна, но все таки вы вроде не учли варианта, когда какому-то пользователю доступны все календари (TableAll::All)
Запихните обязательно этот код в статический метод таблицы и сделайте чтоб он на сервере выполнялся.
Я бы все таки попробывал сджойнить 2 таблицы Exists join, вместо перебора
|