I realise that you can supply a condition in the relation between forum thread and forum category, but it does not seem suited for this thing, as the condition will vary, depending on the ID of the current user and this condition does as far as I can tell not allow parameters.
I could perhaps put it in $condition part of a call to findAll, but then I would need to manually enter the table name, and I don't think that you're supposed to put conditions regarding a model's related models there.
A third alternative would be looping through all forum threads and then ignoring those that satisfy this condition. Like (in a loop):
if ($thread->category->hidden) continue;
But that would be a waste.
Or is this perhaps considered an "advanced" query and should be created using the DAO directly instead?