SELECTED ANSWER
replied on December 22, 2020
This sample shows how to get group membership, and add a user to a group:
public static void LFDSMembershipSample()
{
Server lmoServ = Server.Connect(lfdsServer, false);
Database lmoDB = lmoServ.GetDatabaseByRealmName(lfdsDatabase);
lmoDB.Login(new SessionTokenParameters() { });
// Get all LFDS users
List<User> allLFDSUsers = lmoDB.GetAllUsersEx(0, (int)UserFlags.ApplicationAccount);
// Get all LFDS groups
List<Group> allLFDSGroups = lmoDB.GetAllGroups();
// Cache the mapping from SID to trustee
Dictionary<string, ITrustee> sidCache = new Dictionary<string, ITrustee>();
allLFDSUsers.ForEach(u => sidCache.Add(u.SIDString, u));
allLFDSGroups.ForEach(g => sidCache.Add(g.SIDString, g));
// Get all members for each group
Dictionary<string, List<ITrustee>> allGroupMembers = new Dictionary<string, List<ITrustee>>();
Dictionary<string, List<Group>> allUserGroups = new Dictionary<string, List<Group>>();
foreach (Group group in allLFDSGroups)
{
var groupMembers = group.GetMembers();
// allGroupMembers is groupSID -> <List of accounts in that group>
allGroupMembers.Add(group.SIDString, groupMembers.Select(kvp => sidCache.ContainsKey(kvp.Key) ? sidCache[kvp.Key] : null).ToList());
// allUserGroups is userSID -> <List of groups this user belongs to>
foreach (var trusteeSID in groupMembers.Keys)
{
if (!allUserGroups.ContainsKey(trusteeSID))
allUserGroups[trusteeSID] = new List<Group>();
allUserGroups[trusteeSID].Add(group);
}
}
// Report the groups that each user belongs to
foreach (User user in allLFDSUsers)
{
Console.WriteLine($"{user.Name} belongs to :");
if (!allUserGroups.ContainsKey(user.SIDString))
{
Console.WriteLine("(none)");
continue;
}
foreach (var group in allUserGroups[user.SIDString])
{
Console.WriteLine($"{group.Name}");
}
// NOTE: Alternatively, you could call user.GetLFDSGroupMembership
}
// Assign a user to a group
Group sampleGroup = allLFDSGroups.FirstOrDefault();
User sampleUser = allLFDSUsers.FirstOrDefault();
if (sampleGroup != null && sampleUser != null)
{
Dictionary<string, string> currentMembers = sampleGroup.GetMembers();
List<string> newMembers = currentMembers.Keys.ToList();
Console.WriteLine($"Adding {sampleUser.Name} to {sampleGroup.Name}");
newMembers.Add(sampleUser.SIDString);
sampleGroup.SetMembers(newMembers);
}
}