仕様 (v4)
オペレータが権限を持っているページ全てを上書きすることができる
仕様 (v5)
"v5 で更新が実行できない場合" を除いて、オペレータが権限を持っているページ全てを上書きすることができる。更新によってツリーが権限的に壊れることはないが、元々壊れている場合は修正される場合とされない場合がある。
複数のグループが紐づいたページの権限更新について (v7)
更新するページツリー内に複数のグループが紐づいたページがある場合、そのページの更新処理は/資料/外部仕様/複数グループが紐づいたページの操作 の「ページ grant の更新」に従う。これにより、更新できないページがある場合でも、他の更新可能なページについては更新が反映される。
v5 以降で更新が実行できない場合
前提としてツリーは基本的に v5 ページとユーザーグループのルール に基づいている。
ページツリー内にユーザが権限を持たないページがある場合、子孫ページの権限更新ができない場合がある。具体的には、以下の操作は可能。それ以外はできない。
- 書き換えられるページだけ全て public にする
- 書き換えられるページに対してだけ、自身 (user A) が所属する任意の数のグループ (userGroupA1, userGroupA2...) が grant を持つかどうかを変更する
ただし、 2 については実行条件がある
group grant への変更の実行条件
以下の変数を定義する。
- userA: オペレータ
- [userGroupA1, userGroupA2, ... userGroupB1, userGroupB2, ...]: 変更後のツリーの root page の grant
- [userGroupA1, userGroupA2, ...]: userA が所属しているグループ
- [userGroupB1, userGroupB2, ...]: userA が所属していないグループ
- grantListX: 更新するツリー内の、user A が権限を持たないページ群の各 grant
- onlyMeX: userA ではないユーザに対する only me grant
- [userGroupX1, userGroupX2...]: userA がどのグループにも所属していない group grant
この時、grantListX の各要素に対して、以下を全て満たさなければ実行することはできない。
- onlyMeX のユーザが、[userGroupA1, userGroupA2, ... userGroupB1, userGroupB2, ...] のいずれかに所属している
- [userGroupX1, userGroupX2...] が、どれも [userGroupA1, userGroupA2, ... userGroupB1, userGroupB2, ...] のいずれかの子孫グループである」
ツリーが壊れていて操作不能になるのを回避するには、ツリーを複製してまず自分に権限がある範囲だけのツリーを作成し、そこでまとめて権限の更新を行う(2022.10 時点では権限のないページまで複製されるためこちらの修正が必要)
ツリーの種類別具体例
オペレータは user A
- ✅ => 全て好きな権限に更新可能
- 🚩 => ルールを満たしている範囲だけを
public
orルール通りの user group にのみ変更可能
- ❌ => 更新不能
✅ と 🚩 では同じメソッドを走らせて更新させる
ユーザーグループ構成
ex. AB には user A と user B が所属する。AB と AC は親子関係にない。
- gAB
- gA
- gB
- gAIsolated
- gC
ツリー GRANTED ✅
権限的に正しく、全てのページにオペレータの権限がある以下のようなツリー
-
/gAB
- /gAB
- /gA
- /onlyA
- /gAIsolated
-
/onlyA
- /onlyA
ツリー PUBLIC_SINGLE_GROUP 🚩
権限的に正しく、ルートが public
、配下に 1種類の家系のグループのみが存在するツリー
- /public
- /gAB
- /gB
- /gA
- /gAB
ツリー PUBLIC_SINGLE_GROUP_INCLUDE_ONLYME 🚩
権限的に正しく、ルートが public
、配下に 1種類の家系のグループと、その家系に属す only me
が存在するツリー
- /public
- /gAB
- /onlyA
- /onlyB
ツリー PUBLIC_SINGLE_GROUP_NOT_INCLUDE_ONLYME ❌
権限的に正しく、ルートが public
、配下に 1種類の家系のグループと、その家系には属さない only me
が存在するツリー
- /public
- /gAB
- /onlyC
ツリー PUBLIC_MULTIPLE_GROUP_INCLUDE_NOT_GRANTED_GROUP ❌
権限的に正しく、ルートが public
、配下に 2種類以上の家系のグループが存在し、そのうちの一つ以上ががオペレータの権限を持たないものであるツリー
- /public
- /gAB
- /gC
権限的に壊れているツリーの場合は?
権限的に壊れているかは完璧には捕捉できないので同じルールで更新する
UI 上の表示
一部のページしか更新できないと判断された場合は確認モーダルを表示する