pfSense supports VLANs natively, you have to create them under Interfaces->(assign)->VLANs and then you create a new interface using Interfaces->(assign)->Interface assignment and select the VLAN you created as "NIC" for the Interface. Then you save and configure that new interface from the Interfaces menu with an IP address as needed. At that point, you go to the firewall rules, click the tab for that interface, and add rules to allow traffic. pfSense handles the routing automatically. Keep in mind that pfSense always filters traffic by applying rules to traffic coming "in" the interface the rule is for. So interface VLAN10 for example would have rules that applied (allowed or blocked) traffic whose source was the VLAN10 interface.
By default, interfaces on pfSense allow NO traffic so you will need to add allow rules as necessary to allow inter-VLAN routing and access to the Internet. Floating rules and Interface Groups (which hold a set of interfaces that you can create rules for all at once) may help reduce the number of rules you need for a large number of VLANs.
You'll need to set up the VLANs on the switches of course to be tagged correctly so they all reach pfSense and are tagged on the port that plugs into the pfSense interface where you create the VLANs.
Alternately you could do your routing in a Layer 3 switch, or with an open-source routing platform like Vyatta, or using a Microtik Routerboard device, and have pfSense just firewall the route from the router to the Internet connection(s).