public async Task <ObjectResult> GetAllComponents() { try { var handler = this.services.GetService <ComponentPermissionsHandler>(); var users = await this.GetUsers(true); var components = await handler.GetUserPermissionsOnComponents(); var roles = JosekiAppRoles.GetJosekiAppRoles(); var result = new { Users = users, Components = components, Roles = roles, }; return(this.StatusCode(200, result)); } catch (Exception ex) { Logger.Error(ex, "Failed to get component permissions"); return(this.StatusCode(500, $"Failed to get component permissions")); } }
/// <summary> /// Return list of users in azure ad. /// </summary> private async Task <List <JosekiUser> > GetUsers() { var users = new List <JosekiUser>(); try { var confidentialClientApplication = ConfidentialClientApplicationBuilder .Create(this.configuration.AzureAD.ClientId) .WithTenantId(this.configuration.AzureAD.TenantId) .WithClientSecret(this.configuration.AzureAD.ClientSecret) .Build(); ClientCredentialProvider authProvider = new ClientCredentialProvider(confidentialClientApplication); GraphServiceClient graphClient = new GraphServiceClient(authProvider); var result = await graphClient.Users .Request() // .Select("Id, displayName") .GetAsync(); foreach (var userdata in result.CurrentPage) { // get user's app roles var appRoleAssignments = await graphClient.Users[userdata.Id] .AppRoleAssignments .Request() .GetAsync(); var user = new JosekiUser() { Id = userdata.Id, Name = userdata.DisplayName, AppRoles = JosekiAppRoles.GetUserRoles(appRoleAssignments), }; users.Add(user); } } catch (Exception ex) { Logger.Error(ex, "Failed to get list of users"); } // TODO: handle list more than 50 users/roles return(users); }