コンテンツにスキップ

管理画面

管理画面は操作の形をしている。テーブルの行編集は無い。

これは意図的な拒否である。行を直接編集できると、ドメインが禁じていることが画面から できてしまう——retired の shoulder を戻す、ark の主キーを書き換える、名前空間を消す。 モデルから CRUD を自動生成する方式(sqladmin など)は要するに気の利いた DB ブラウザで、 「やらないこと」に価値がある台帳には向かない。

どのページも domain.admin_opsdomain.minting を呼ぶ。CLI と同じ関数なので、 画面から不変条件を迂回する道は無い。

何を見せるか

組織管理 — 台帳そのものを入れ子で見せる。組織番号(NAAN)→ 組織 → 名前空間。 ARK は名前空間を受け渡す体系なので、渡した形がそのまま中身である。

画面の言葉は「委譲の構造」ではなく「組織管理」にしてある。台帳を初めて見る人が 最初に開く画面なので、その人がまだ持っていない語を見出しにしない

ただし用語は捨てず、括弧で残す——「名前空間(shoulder)」「組織番号(NAAN)」 「永続・内容は変わりうる(permanent-dynamic)」のように、平易な言い方を先に置いて 用語を添える。初めての人はそのまま読め、用語を知っている人は 仕様・CLI・API との対応が取れる。用語を消すと、この画面 だけが他と違う言葉を話すことになる。

ARK を採番 — 手作業で 1 本要るとき用(移行時の個別対応、物理オブジェクト、動作確認)。 組織は通常 API から採番する。

利用者と鍵 — 誰が、どの鍵で、どこまで届くか。ここに並ぶのは組織そのもの ではなく、組織のシステムと、その組織に属する人である。

画面の「利用者」= API と CLI の「主体(principal)」

読み手が違うので、呼び方も分けてある。 画面を読むのは運用の担当者で、 API と CLI を読むのは開発者である。

画面 API・CLI・データモデル
利用者 主体 / principal(Client
資格情報 / credential

「主体」はアクセス制御で subject を訳した語で(対になる object は「客体」)、 Subject(machine / person)という列名もここから来ている。クラウド事業者の 文書では「プリンシパル」とカタカナで書かれることが多い。

監査ログ — NAAN 単位以上にしか見せない。誰が何をしたかはその名前空間を預かる側の 情報で、組織の担当者が他組織の履歴を読む筋合いは無い。

到達範囲が画面を決める

画面の出し分けと実際の認可に、同じ判定を使う。 別々にすると「ボタンは出ないが URL を直接叩けば通る」穴ができる。

ログインした人 見えるもの 監査ログ
システム管理者 全 NAAN
NAAN 管理者 1 NAAN 配下の全組織
組織管理者 1 組織 403

入り方

ARKHE_ADMIN_LOGIN で決める。認証を参照。bearer では ログイン画面そのものが無い——「ブラウザからは入れない」という選択である。

引き返せない操作は、見た目でそう分かるようにしてある。 実際に引き返せないから—— 採番した ARK は取り消せず、引退した名前空間は戻らない。

設定を変える

画面から変えられるのは、宣言と運用の設定だけ。 ARK の行も shoulder の綴りも 画面からは変えられない——変えられると、NR を宣言しているはずの体系で名前が 振り直せることになる。

何を 誰が
NAA ポリシー(NAAN の宣言) NAAN 単位以上
採番の案内先(/.well-known/ark システム管理者
約束の水準(組織の宣言) その組織自身と、それ以上
1 日あたりの採番上限 NAAN 単位以上
shoulder の状態・委譲先 NAAN 単位以上

この分かれ方は権限表ではなく、ARK の委譲の構造がそのまま出たものである。 NAA ポリシーは名前空間を配る側の宣言で、配下の全組織にかかる——だから 1 組織の 管理者には変えられない。約束の水準は配られた側が自分について述べるもので、 述べる主体が述べられなければ意味がない——だから組織管理者が変えられる。

採番上限だけは組織自身では変えられない。上限は配った側が課すものなので、 課された側が外せては意味がない。

判定は domain.admin_ops にしかない。画面は同じ関数を呼ぶので、ボタンが 出ないのに URL を直接叩けば通る、ということが起きない。

国際化

日本語と英語。ヘッダーの地球儀から切り替える。言語は ?lang= → cookie → Accept-Language の順で決まる。

カタログは gettext ではなく素の辞書なので、言語の追加はモジュール 1 つで済み、 ビルド手順も増えない。翻訳の抜けは起動時に落ちるので、片方のカタログにだけ 足したことに気づける。