【问题标题】:Is there any way to retrieve groups for member with option:directOnly=false using Admin SDK?有没有办法使用 Admin SDK 检索具有 option:directOnly=false 的成员组?
【发布时间】:2014-04-11 22:24:00
【问题描述】:

Provisioning API 在检索用户所属的组时提供了“directOnly”参数来控制组的范围。我应该从 Provisioning API 迁移 Admin SDK,但我没有找到使用 directOnly=false 为用户检索组的方法。我该如何使用 Directory API?

我实现了以下(伪语言),因为我找不到方法。 但我认为这不是有效的方法。 我想知道“directOnly=false”是否有任何计划。

// 1. List all groups in domain
allGroupsInDomain = ... // "List all groups in domain"
// 2. List all members for each groups
allMembersForGroup = {}
for (group in allGroupsInDomain) {
    allMembersForGroup[group] = ... // "List all members for group"
}

// 3. List all users in domain
allUsersInDomain = "List all users in domain"
// 4. List all groups for user(direct only)
allGroupsForUser = {} // I want to get this for all users
for (user in allUsersInDomain) {
    directGroupsForUser = ... // "List all groups for user(direct only)"
    for (group in directGroupsForUser) {
        allGroupsForUser[user].add(group);
        allGroupsForUser[user].add(searchAncestorsOf(group));
    }
}

// 5. Calculate all groups for user contains not directly group using results of (1,2,3,4)
function searchAncestorsOf(group) {
    ancestors = []
    for (group_ in allGroupsInDomain) {
        if (group_.hasMember(group)) {
            ancestors.add(group_);
            ancestors.add(searchAncestorsOf(group_));
        }
    }
    return ancestors;
}

【问题讨论】:

标签: google-admin-sdk


【解决方案1】:

目前没有单一的 API 调用方法来获取用户的直接和间接组成员资格,Admin SDK 目前可用。对于少数用户,我能想到的最快方法是:

  1. 使用 members.list 和 userKey 参数获取用户的所有直接成员资格组。

  2. 对于用户是其直接成员的每个组,使用 members.list 再次确定该组是否是其他组的成员,此时 userKey 是每个组而不是用户。如果该组是另一个组的成员,则用户将是给定组的间接成员。

【讨论】:

  • 问题是这只适用于一小部分用户。实际上,如果您想避免递归,可以存储地图,但不可能通过预处理所有现有组来使其实时更新,最多可能每天一次。
  • 2018年还是这样吗?
猜你喜欢
  • 2023-03-19
  • 2021-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-11
  • 2016-09-29
相关资源
最近更新 更多