Hi Paul,
Are your departments also groups? If so, then granting "forum_read" for a forum only to its corresponding department should do the trick. Reading the code on the index page, it appears that the forum's posting policy should also be 'closed'. This should hide the forums which the department user does not have access to.
I would start by using the forums/permissions UI to achieve the desired result. You can then use the Tcl API to accomplish this in your code for managing departments (ie, create a closed forum, set the permissions, etc).
Sorry if this advice is too general, but I do hope it gets you going in the right direction!
Good luck...