Developers (along with whomever else needs access) should have access to create, assign and resolve a bug.
Testers have access to create, edit, assign, postpone, resolve, verify, fail and close.
I do believe that developers need to have access to "Resolved". This means that they have resolved the issue at hand and are ready to submit it back to QA for verification. If it is verified, it is closed, by QA. If not, it is failed and sent back to development.
QA / QC needs to verify the completion of a bug for the same reasons that developers cannot test their own code. Developers are too close to the code, too close to test their own work (including their own fixes).