Block on user profile only
I think you have 2 main options:

You can use some custom PHP to control the blocks visibility. Something like:

global $user;
$account = user_load($user-&gt;uid);
if($account-&gt;profile_type[LANGUAGE_NONE][0]['value'] == 'some value') return true;
return false;


Or I think this is a good use case for the Context module. This allows you to create different "contexts" that your blocks should appear in. An example from the Context help file says:

You want to create a "pressroom" section of your site. You have a press room view that displays press release nodes, but you also want to tie a book with media resources tightly to this section. You would also like a contact block you've made to appear whenever a user is in the pressroom section.


Add a new context on admin/build/context
Under "Conditions", associate the pressroom nodetype, the pressroom view, and the media kit book with the context.
Under "Reactions > Menu", choose the pressroom menu item to be set active.
Under "Reactions > Blocks", add the contact block to a region.
Save the context.