Pass service to view model or leave thin controller as is I have the following action:

    public PartialViewResult Analyze()
    {
        var viewModel = new WelcomeAnalyzeViewModel
        {
            IsDrugsPanelVisible = !Service.IsMDStandalone(),
            IsDevicesPanelVisible = Service.IsSubscribedToMedTech(),
            IsCompaniesPanelVisible = !Service.IsCTStandalone(),
            IsCountriesPanelVisible = !Service.IsCTStandalone() || (Service.IsCTStandalone() &amp;&amp; Service.HasImsAddOn()),
            IsFinancePanelVisible = !Service.IsCTStandalone()
        };

        return PartialView("Analyze", viewModel);
    }


I'm not sure if I should just pass the Service property to the constructor of the WelcomeAnalyzeViewModel or leave this code as is but from the perspective of a thin controller this doesn't feel right.

The Service property contains an object to a permission service (IPermissionService) which can be used for other applications outside of the web environment.

Would it be acceptable for one service to call another service, so for instance I create an AnalyzeService which contains methods with calls to IPermissionService methods?
I would suggest having a separate class for doing this processing and mapping.
It will be a service or mapper class takes your Service object in the constructor and has a method which return WelcomeAnalyzeViewModel object.

Also you can do it all through the method, by passing your Service object to this method and return the WelcomeAnalyzeViewModel, this will make your controller very thin something like that:

public PartialViewResult Analyze()
{
        var viewModel = Mapper.GetWelcomeAnalyzeViewModel(Service);
        return PartialView("Analyze", viewModel);
}

public class Mapper
{
  public WelcomeAnalyzeViewModel(ServiceType service)
  {
      return new WelcomeAnalyzeViewModel
        {
            IsDrugsPanelVisible = !Service.IsMDStandalone(),
            IsDevicesPanelVisible = Service.IsSubscribedToMedTech(),
            IsCompaniesPanelVisible = !Service.IsCTStandalone(),
            IsCountriesPanelVisible = !Service.IsCTStandalone() || (Service.IsCTStandalone() &amp;&amp; Service.HasImsAddOn()),
            IsFinancePanelVisible = !Service.IsCTStandalone()
        };
  }
}


And i will put this mapper class in the ViewModels project if you have a separate project for them.