# 同期可能なスコープ
現段階では

- LDAP グループの直接同期
- Keycloak に読み込まれた LDAP グループの同期
    - Keycloak で直接作成されたグループももちろん同期可能

の二つが可能。
また、**「GROWI <- 外部アプリ/サーバ」方向の同期のみ**が可能。

# 同期実行タイミング
[キックオフ](https://dev.growi.org/6447913208853ffa7052ebe8) ではログイン時の自動同期と手動同期の案が上がっていたが、同期時に Keycloak がグループ一覧のリクエストに加えてグループに所属するメンバー一人一人の情報のリクエストを行う必要があり、グループ数/ユーザ数によっては重い処理となる可能性があるので、手動実行としたい

# 子グループメンバーの親グループへの所属をどうするか
## GROWI の UserGroup の仕様
- **ユーザ管理**: 子グループに追加したユーザは自動的に親グループに追加される
- **権限継承**:（権限を表す model は GROWI にはないが）子グループに属している = 親グループにも属しており、親グループの権限がある、という状態が実現されている
    - 親グループから外されると子グループからも外される
## LDAP グループの仕様
- **ユーザ管理**: 親グループに所属するユーザと子グループに所属するユーザは別々に管理される
- **権限継承**: グループの木構造を表すだけで、LDAP 自体の機能としての親グループから子グループへの継承機能はない
    - 木構造からどのように権限を設定するかは LDAP を使うアプリケーション側に委ねられている
## Keycloak グループの仕様
- **ユーザ管理**: 親グループに所属するユーザと子グループに所属するユーザは別々に管理される
    - UI 上で親グループのメンバー欄に子グループのメンバーを表示する機能はあるが、内部的にはそのメンバーは親グループに属していない
- **権限継承**: グループには role という権限を表す値があり、子グループには親グループの role が継承される。
    - （GROWI には role がないので）role は今施策では同期しないが、親から子へと継承するという思想は GROWI と同じ
## 結論
ExternalUserGroup は、UserGroup と同様に、子グループに属するユーザは親グループにも属する、という仕様にし、同期時にその状態を作るようにする。
- **理由**: 各権限継承の考え方から見ても UserGroup の形に合わせるのは特に問題はなく、何より UserGroup と ExternalUserGroup を一緒に使った実装がしやすくなる。
    - 仮に Keycloak の role のような概念が今後 GROWI に追加されたとすると、Keycloak 側に寄せるのか同じ構造のままにするのか考える余地がありそう。その時は UserGroup の構造も再検討するべきかと。

# UI
## 外部グループ一覧表示
グループ管理の画面で、「グループ一覧」の下に「外部グループ一覧」を表示する。
- 新規作成: 不可
- 編集: description のみ可 (mapper を設定している場合、再同期で編集内容が上書きされる可能性あり)
- 削除: 可

## グループ同期 UI
グループ管理の画面で、グループ同期を設定・発火する UI を表示する。

# 大規模グループ同期の検証結果
### 実行環境
- M1 macbook air
- docker に割り当てているリソース
  - CPUs: 6
  - Memory: 10GB
### 同期するデータ
- グループ 100 個
  - グループツリー 10 個
  - ツリーの階層 10
  - 1グループ/階層
- ユーザ 10000 人
  - 100 ユーザ/グループ
## LDAP
GROWI を実行している開発環境で LDAP サーバを用意
### 実行時間
4:49.302 (m:ss.mmm)
### メモリ使用
同期実行直前/実行中/実行直後のメモリ使用
```
2.795GiB / 9.718GiB
2.992GiB / 9.718GiB
3.375GiB / 9.718GiB
3.329GiB / 9.718GiB
3.681GiB / 9.718GiB
3.529GiB / 9.718GiB
3.337GiB / 9.718GiB
3.474GiB / 9.718GiB
3.478GiB / 9.718GiB
3.383GiB / 9.718GiB
3.699GiB / 9.718GiB
3.513GiB / 9.718GiB
3.403GiB / 9.718GiB
3.371GiB / 9.718GiB
3.421GiB / 9.718GiB
3.446GiB / 9.718GiB
3.616GiB / 9.718GiB
3.431GiB / 9.718GiB
3.431GiB / 9.718GiB
3.394GiB / 9.718GiB
3.418GiB / 9.718GiB
3.427GiB / 9.718GiB
3.374GiB / 9.718GiB
3.463GiB / 9.718GiB
3.453GiB / 9.718GiB
3.459GiB / 9.718GiB
3.508GiB / 9.718GiB
3.508GiB / 9.718GiB
2.738GiB / 9.718GiB
2.732GiB / 9.718GiB
```

## Keycloak
GROWI を実行している開発環境で Keycloak サーバを用意。
Keycloak 側で LDAP サーバのグループを読み込む設定を行う。
### 実行時間
7:09.994 (m:ss.mmm)  
同期実行時、Keycloak に LDAP グループ情報を読み込む処理が挟まるため、LDAP よりも実行時間が長い。
### メモリ使用
同期実行直前/実行中/実行直後のメモリ使用
```
Memory Usage: 3.725GiB / 11.68GiB
Memory Usage: 3.742GiB / 11.68GiB
Memory Usage: 3.745GiB / 11.68GiB
Memory Usage: 3.715GiB / 11.68GiB
Memory Usage: 3.725GiB / 11.68GiB
Memory Usage: 3.739GiB / 11.68GiB
Memory Usage: 3.968GiB / 11.68GiB
Memory Usage: 3.966GiB / 11.68GiB
Memory Usage: 3.98GiB / 11.68GiB
Memory Usage: 4.152GiB / 11.68GiB
Memory Usage: 4.283GiB / 11.68GiB
Memory Usage: 4.196GiB / 11.68GiB
Memory Usage: 4.304GiB / 11.68GiB
Memory Usage: 4.269GiB / 11.68GiB
Memory Usage: 4.241GiB / 11.68GiB
Memory Usage: 4.231GiB / 11.68GiB
Memory Usage: 4.301GiB / 11.68GiB
Memory Usage: 4.334GiB / 11.68GiB
Memory Usage: 4.243GiB / 11.68GiB
Memory Usage: 4.293GiB / 11.68GiB
Memory Usage: 4.296GiB / 11.68GiB
Memory Usage: 4.281GiB / 11.68GiB
Memory Usage: 4.263GiB / 11.68GiB
Memory Usage: 4.298GiB / 11.68GiB
Memory Usage: 4.322GiB / 11.68GiB
Memory Usage: 4.327GiB / 11.68GiB
Memory Usage: 4.377GiB / 11.68GiB
Memory Usage: 4.404GiB / 11.68GiB
Memory Usage: 4.392GiB / 11.68GiB
Memory Usage: 4.334GiB / 11.68GiB
Memory Usage: 4.332GiB / 11.68GiB
Memory Usage: 4.346GiB / 11.68GiB
Memory Usage: 4.349GiB / 11.68GiB
Memory Usage: 4.321GiB / 11.68GiB
Memory Usage: 4.337GiB / 11.68GiB
Memory Usage: 4.342GiB / 11.68GiB
Memory Usage: 4.35GiB / 11.68GiB
Memory Usage: 4.364GiB / 11.68GiB
Memory Usage: 4.337GiB / 11.68GiB
Memory Usage: 4.373GiB / 11.68GiB
Memory Usage: 4.375GiB / 11.68GiB
Memory Usage: 4.373GiB / 11.68GiB
Memory Usage: 4.373GiB / 11.68GiB
Memory Usage: 3.657GiB / 11.68GiB
Memory Usage: 3.656GiB / 11.68GiB
Memory Usage: 3.656GiB / 11.68GiB
Memory Usage: 3.657GiB / 11.68GiB
Memory Usage: 3.658GiB / 11.68GiB
```

---

## Page Navigation

- Canonical URL: https://dev.growi.org/資料/外部仕様/LDAPグループ同期
- Permalink: https://dev.growi.org/646d5637019e02272a42cf86
- Parent: [外部仕様](/5f9996b89d9ead0049f0ab65.md)
- Children: 0 total
- Total descendants: 0
- Siblings: 35 total
  - [Audit Log Bulk Export](/68b694cdabc93bd7957d265c.md)
  - [G2G Transfer](/6346925ae4791185c5e853e0.md)
  - [Page Bulk Export](/6555604cc364daae3a0a0946.md)
  - [S3のACL設定](/5d091f611fe336003eec5bfd.md)
  - [WIP ページ](/65699af6f32b6358c8efa636.md)
  - [audit-log](/61d6ecdae1ae10d6e19f891f.md)
  - [growi-database-plugin](/634784884b3568aa883bfe05.md)
  - [お知らせ機能](/650d5e7f1647c0285cbb8ae0.md)
  - [アンカーによるページのScroll](/60262e7f15f624004857eb4b.md)
  - [アンケート機能](/6385912d1632aa30f4dae840.md)
  - [インストールプロセス](/600908ded3b38b00486b4b8e.md)
  - [インラインコメント機能](/6503fa29ccf8a72c114fd223.md)
  - [ゲストユーザーが取得できる情報](/5fa395329d8cee004846bb2b.md)
  - [コンテキスト別表示条件一覧](/5fabddf8bbeb1a0048bcb9e9.md)
  - [コンテンツ多言語対応](/6915d04fbdc3b77cabf237ec.md)
  - [サイドバー](/64f551e3bd1b000bf8acccdd.md)
  - [タグに関する仕様](/61713f737000780eeb72f0c8.md)
  - [タグの更新](/5f97e26eb269d70048a2bdc8.md)
  - [ビルトインエディタでの同時多人数編集](/651a6f4a008fee2f99187431.md)
  - [ファイルアップローダー管理画面での操作](/5f99a08e9d9ead0049f0ab80.md)
  - [ページ&ユーザーグループv5](/61b2cdabaa330ce7d8152844.md)
  - [ページの削除](/62271ba808e08bfffd17d07e.md)
  - [ページの移動・リネーム](/6260ff12175c306030e8748f.md)
  - [ページへの複数グループ紐付け](/65253f66b8492a62fc75865f.md)
  - [ページ新規作成時に添付ファイルをアップロードした時の挙動](/645cb75e97cc638e5f3d43f0.md)
  - [ユーザーAPI](/5fd7466a31d89500488248e3.md)
  - [ワークフロー機能](/64d1ee0d67e9a7482fe87ca5.md)
  - [一括削除ボタン、一括削除機能の追加](/625d4ed354f617fa1264d2a3.md)
  - [子孫ページの権限をまとめて更新](/635a314eac6bcd85cbf359fc.md)
  - [検索v5](/619b61e74f3f92073de6964b.md)
  - [検索結果ページのコメント表示](/621ca4cfd9a9f09266ad1503.md)
  - [権限修正が可能なページのアラート](/626f59d70e471e40b93c736a.md)
  - [添付ファイル内全文検索](/69f2e686317cd5dede8898fc.md)
  - [環境変数によるファイルアップローダー設定](/5f9a4106431b5c0048050a2a.md)
  - [複数グループが紐づいたページの操作](/656745fa52eafe1cf1879508.md)
- Last updated: 2025-09-26T13:54:39.496Z by arafubeatbox
- Full page listing (all children regardless of count): https://dev.growi.org/_api/v3/page-listing/children?id=646d5637019e02272a42cf86
