How can I restrict the categories users can post in, based on user roles?

Try using these codes:

function themename_check_user_role( $role, $user_id = null ) {

    if ( is_numeric( $user_id ) )
    $user = get_userdata( $user_id );
    else
        $user = wp_get_current_user();

    if ( empty( $user ) )
    return false;

    return in_array( $role, (array) $user->roles );
}

// example use for the current user
if ( themename_check_user_role( 'customer' )
    _e( "You've got access!", 'themename' );
else
    _e( "Sorry, you don't have access!", 'themename' );

Here, you are checking whether a particular user has a role or not. If a match is found, true will be returned.