コード例 #1
0
        public Models.UserDetail CreateUser(Models.UserToCreate user)
        {
            WAAD.DirectoryDataService graphService = DirectoryDataServiceFactory.GetInstance(_authConfig);
            // Note here that if tenant has multiple domains, the domain to use would need
            // to be specified on the request to us instead
            WAAD.User waadUser = user.ToWaadUser(_authConfig.DirectoryDomain);
            graphService.AddTousers(waadUser);

            var allGroups = graphService.directoryObjects.OfType<WAAD.Group>().ToList();
            foreach (var groupId in user.DesiredRoleIds)
            {
                graphService.AddLink(allGroups.First(x => x.objectId == groupId), "members", waadUser);
            }
            
            graphService.SaveChanges();
                                    
            return waadUser.ToUserDetail(Enumerable.Empty<WAAD.Group>());
        }
コード例 #2
0
        public Models.UserDetail UpdateUser(Models.UserToUpdate user)
        {
            WAAD.DirectoryDataService graphService = DirectoryDataServiceFactory.GetInstance(_authConfig);
            WAAD.User waadUser = graphService.users.Where(x => x.objectId == user.Id).SingleOrDefault();
            if (waadUser == null)
            {
                return null;
            }
            
            // Load user's current groups so we know what we have to do to have things reflect desired state
            graphService.LoadProperty(waadUser, "memberOf");
            var userCurrentGroupIds = waadUser.memberOf.OfType<WAAD.Group>().Select(x => x.objectId).ToList();

            // Load all groups
            var allGroups = graphService.directoryObjects.OfType<WAAD.Group>().ToList();

            // See which groups user has now but no longer wants
            foreach (var groupIdToRemove in userCurrentGroupIds.Except(user.DesiredRoleIds))
            {
                var groupToRemoveLinkFrom = allGroups.FirstOrDefault(x => x.objectId == groupIdToRemove);
                if (groupToRemoveLinkFrom != null)
                {
                    graphService.DeleteLink(groupToRemoveLinkFrom, "members", waadUser);    
                }                
            }
            // See which new groups user wants
            foreach (var groupIdToAdd in user.DesiredRoleIds.Except(userCurrentGroupIds))
            {
                var groupToAddLinkTo = allGroups.FirstOrDefault(x => x.objectId == groupIdToAdd);
                if (groupToAddLinkTo != null)
                {
                    graphService.AddLink(groupToAddLinkTo, "members", waadUser);
                }                                
            }

            waadUser.displayName = user.Name;
            graphService.UpdateObject(waadUser);

            graphService.SaveChanges();

            // At this point, does waadUser reflect updated links in its memberOf prop that we previously loaded?
            return waadUser.ToUserDetail(allGroups.Where(x => user.DesiredRoleIds.Contains(x.objectId)));
        }