author.php shows profiles of all users not authors only

You’re going to want to use the author_template filter to process this. Just to clarify, the filter’s “author” means all users, it appears. I’m not sure why. This will be called while the backend is deciding which template page to use when showing a user’s profile on your site. You need to add an author-editor.php file and then filter to it if the user matches your criteria.

function author_role_template( $templates="" )
{
    $author = get_queried_object();
    $role=$author->roles[0];

    if($role == 'author') {
        $templates=locate_template(array("author-author.php",$templates),false);
    } else { // error if not author
        $templates=locate_template(array("404.php",$templates),false);
    }
    return $templates;
}
add_filter( 'author_template', 'author_role_template' );

Source: Codex — Template Hierarchy

NOTE: You’ll need to verify that roll returns true for this. I’m not 100% on it the comparison of the roll to the string.