Things you should know about the WordPress function get_posts():
- It forces published status unless you pass in a post_status argument
- There is no option to return both published and private posts
- It bypasses query filtering (such as Role Scoper's) unless you pass in suppress_filters=0
- In WP 2.5 and earlier, query filtering is always bypassed
Of course, it's possible to call get_posts() separately for publish and private status, and combine the results. To keep your theme code simpler, I would call WP_Query::query directly instead:
$scoper->query_interceptor->skip_teaser = true;
$temp_query = new WP_Query;
$cat_id = 0; // set to pertinent value
$first_readable_cat_post = $temp_query->query("cat=$cat_id&posts_per_page=1″);
$scoper->query_interceptor->skip_teaser = false;
Of course, this is only necessary if your site is using the Hidden Content Teaser for posts. Without the skip_teaser setting, you would have to walk through the return array and manually disregard and posts with the scoper_teaser property set true.
Note, though that the skip_teaser setting will not be effective with Role Scoper <= 1.0.0 RC5b unless you add the following line at the top of function _get_teaser_object_types in query_interceptor_rs.php:
if ( ! empty($this->skip_teaser) )
return array();