can I give permission to insert into view, but not to referred table? Here I have a view in public schema referring to the table in private schema:

CREATE OR REPLACE VIEW public.products AS 
 SELECT products.id, products.product_id, products.title, products.company_id
   FROM private.products;

ALTER TABLE products
  OWNER TO postgres;
GRANT ALL ON TABLE public.products TO postgres;
GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE products TO viewers;


CREATE OR REPLACE RULE "_INSERT" AS
    ON INSERT TO products DO INSTEAD  INSERT INTO private.products (product_id, title, company_id) 
  VALUES (new.product_id, new.title, new.company_id);


the whole thing works fine, 
but I want the client to only be able to operate in public schema and not in private. Is there a way to setup such permissions?
Yes you can. Per documentation:


  Note that the user performing the insert, update or delete on the view
  must have the corresponding insert, update or delete privilege on the
  view. In addition the view's owner must have the relevant privileges
  on the underlying base relations, but the user performing the update
  does not need any permissions on the underlying base relations.