Hi Edward,
Yes, you can do a mixed boolean expression this way. It's not very elegant but it's the only way I know how.
Putting attribute checks on the same line ANDs them so you have to duplicate them in this case.
Not very DRY at all but it's all I know. I hope there would a better way since this is pretty common.
has_permission_on :user_levels, :to => [:manage] do
if_attribute :author => is { user } , if_attribute :site => is_in { user.sites }
if_attribute :reporter => is { user } , if_attribute :site => is_in { user.sites }
end