On the danger of repeating myself - PL/SQL or PGPL/SQL functions in where clauses are plain dangerous and do not scale at all.
If the result is known upon creation time - the result of acs__magic_object_id('the_public') is constant - then stuff its result into the view. Or for PG at least create the function as iscacheable.
As to the permissioning: Don suggests using a view instead of the acs_permission__permission_p.