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"));
            }
        }
Ejemplo n.º 2
0
        /// <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);
        }