Too many nested conditionals and assumed responsibilities here. 

Notice we have two cases (lines 26 and 4) where I'm checking if the current user can read the messageboard? This is a red flag. The responsibility for checking this should be bumped up a level from where these helpers are being used (right next to each other, no less).

It's also a bit hard to read. what exactly is going on in line 22? That might stand to be extracted to a (few) smaller private methods with better intention revealing names.