仕様 (v4)

オペレータが権限を持っているページ全てを上書きすることができる

仕様 (v5)

"v5 で更新が実行できない場合" を除いて、オペレータが権限を持っているページ全てを上書きすることができる。更新によってツリーが権限的に壊れることはないが、元々壊れている場合は修正される場合とされない場合がある。

複数のグループが紐づいたページの権限更新について (v7)

更新するページツリー内に複数のグループが紐づいたページがある場合、そのページの更新処理は/資料/外部仕様/複数グループが紐づいたページの操作 の「ページ grant の更新」に従う。これにより、更新できないページがある場合でも、他の更新可能なページについては更新が反映される。

v5 以降で更新が実行できない場合

前提としてツリーは基本的に v5 ページとユーザーグループのルール に基づいている。

ページツリー内にユーザが権限を持たないページがある場合、子孫ページの権限更新ができない場合がある。具体的には、以下の操作は可能。それ以外はできない。

  1. 書き換えられるページだけ全て public にする
  2. 書き換えられるページに対してだけ、自身 (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

ツリー 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 上の表示

一部のページしか更新できないと判断された場合は確認モーダルを表示する