Sure, this was bound to come up eventually. Currently WordPress does not include a convenient hook, so you should begin by hacking wp-includes/category-template.php as follows:
near the top of function get_the_category_list, change:
$categories = get_the_category( $post_id );
to:
$categories = apply_filters( 'get_the_category_for_list', get_the_category( $post_id ) );
Next, modify plugins/role-scoper/hardway/hardway_rs.php as follows:
above class ScoperHardway, add:
add_filter('get_the_category_for_list', 'scoper_get_the_category');
function scoper_get_the_category( $cats ) {
$readable_cats = apply_filters( 'get_terms', array(), 'category', array('fields' => 'ids', 'skip_teaser' => true) );
foreach ( $cats as $key => $cat )
if ( ! in_array($cat->cat_ID, $readable_cats) )
unset( $cats[$key] );
return $cats;
}
To make this work with the Hidden Content Teaser enabled, you will also need to further modify hardway_rs.php as follows:
change:
$doing_teaser = ( ! is_admin() && ! defined('XMLRPC_REQUEST') && scoper_get_otype_option('do_teaser', 'post') );
to:
$doing_teaser = ( ! is_admin() && ! defined('XMLRPC_REQUEST') && empty($skip_teaser) && scoper_get_otype_option('do_teaser', 'post') );
I'll request that hook be added to the WordPress code. If that happens, this feature will be built into Role Scoper starting with the next version.