metro implementation with permission support