angular.module('portainer.services') .factory('AccessService', ['$q', 'UserService', 'TeamService', function AccessServiceFactory($q, UserService, TeamService) { 'use strict'; var service = {}; function mapAccessDataFromAuthorizedIDs(userAccesses, teamAccesses, authorizedUserIDs, authorizedTeamIDs) { var accesses = []; var authorizedAccesses = []; angular.forEach(userAccesses, function(access) { if (_.includes(authorizedUserIDs, access.Id)) { authorizedAccesses.push(access); } else { accesses.push(access); } }); angular.forEach(teamAccesses, function(access) { if (_.includes(authorizedTeamIDs, access.Id)) { authorizedAccesses.push(access); } else { accesses.push(access); } }); return { accesses: accesses, authorizedAccesses: authorizedAccesses }; } service.accesses = function(authorizedUserIDs, authorizedTeamIDs) { var deferred = $q.defer(); $q.all({ users: UserService.users(false), teams: TeamService.teams() }) .then(function success(data) { var userAccesses = data.users.map(function (user) { return new UserAccessViewModel(user); }); var teamAccesses = data.teams.map(function (team) { return new TeamAccessViewModel(team); }); var accessData = mapAccessDataFromAuthorizedIDs(userAccesses, teamAccesses, authorizedUserIDs, authorizedTeamIDs); deferred.resolve(accessData); }) .catch(function error(err) { deferred.reject({ msg: 'Unable to retrieve users and teams', err: err }); }); return deferred.promise; }; return service; }]);