As many other answers indicated, you really should not let the client handle crucial data such as collision detection or positioning. If you let the client determine where it is going and if it can go there, you are making your game an absolute sitting duck for ill-intentioned players and hackers.
I highly suggest you redesign your client-server relations so the client only sends input information and receives data about the world and other objects in it, leaving all the processing to the server.
To minimize the amount of data sent back and forth, the client should send only input messages such as "Player started/ended pressing W", "Player rotated the camera by X,Y,Z degrees" (the server needs to know this if moving the camera during movement will change locomotion's direction), etc. The server will then receive such data and process player's position and whatnot, accounting for collision and whatnot. If player is enabled to move (because there were no collisions with walls), both client and server will update the character's position within the world. If a collision comes to occur, the server will send a "HALT!" message and send the last valid position, and the client will pull the character back to such position. This saves the server from having to discretely send position data at given intervals.
Such method is, obviously, very costly serverside and is prone to position flickering clientside when the player is experiencing lag or high latency (which is not very bad on passive MMOs such as WoW, but it becomes a problem on very action-filled games such as Team Fortress 2, GunZ and Combat Arms). At least it will solve your presented problems and make the game a bit less hackable.
About your question per se: it depends on how the world is modelled. If the only non-passable geometry in the world is comprised of perfectly rectangular walls and nothing else, then you can get away with just OBB collision detections. However, if there are things such as mountains or round buildings, then you'll have to use per-triangle collisions and use some broadphase algorithm to only do such costly detections when absolutely necessary. A tip: you don't have to use the actual models for collision detection. You can make invisible meshes -with lower poly counts and simplified geomtery if compared to the actual models- to serve as bounding meshes and use their polygons on the per-triangle collisions.