We love the "power of defaults". Each web by default has three predefined groups: Owners, Members and Visitors. But their IDs and names are different from web to web. Luckily there is a helper for getting associated groups.
// .Members() and .Owners() correspondingly
group, err := sp.Web().AssociatedGroups().Visitors().Get()
if err != nil {
log.Fatal(err)
}
fmt.Printf(
"Visitors group ID %d, Title \"%s\"\n",
group.Data().ID,
group.Data().Title,
)
Creating groups
group, err := sp.Web().SiteGroups().Add("My group", nil)
if err != nil {
log.Fatal(err)
}
fmt.Printf("New group ID: %d\n", group.Data().ID)
Deleting groups
// or .RemoveByID(groupID)
if err := sp.Web().SiteGroups().RemoveByLoginName("My group"); err != nil {
log.Fatal(err)
}
In group's .AddUser method the argument should be full and valid login name including security provider membership prefix. For instance, while you can ensure Jane using jane.doe@contoso.onmicrosoft.com the same as an .AddUser method will fail as Jane's login is actually different i:0#.f|membership|jane.doe@contoso.onmicrosoft.com.
If you already know UserID but not sure about LoginName .AddUserByID helper is at the disposal.
Removing users from a group
Similarly as with adding users:
user, err := sp.Web().EnsureUser("jane.doe@contoso.onmicrosoft.com")
if err != nil {
log.Fatal(err)
}
memberGroup := sp.Web().AssociatedGroups().Members()
if err := memberGroup.RemoveUser(user.LoginName); err != nil {
log.Fatal(err)
}
// or
if err := memberGroup.RemoveUserByID(user.ID); err != nil {
log.Fatal(err)
}