管理者向け概要

全体構成

Yamori はブラウザ上で動作する SPA 、 SPA 向けの静的ファイルと HTTP API を提供するサーバから成り立ちます。 サーバは SQLite3 データベースにアプリケーションデータを読み書きします。 HTTP/1.1 で配信されるため必ず前段に HTTP/2 or HTTP/3 のプロキシを置いてください

アクセス制御

アクセス制御は全て WebAssembly プログラムとしてサーバに登録されます。

HTTP リクエストが来るとサーバは対応する WebAssembly ファイル・関数を実行して返り値を基にアクセスの許可・拒否を行います。 関数は FlatBuffers のバイト文字列を受け取ります。 FlatBuffers のメッセージにはログインユーザとリクエスト、サーバの状態を含むコンテキストオブジェクトが含まれています。

// users-api-acl-wasm.zig

export fn allowV1GetUsers(buffer_ptr: [*]const u8, buffer_len: u32) bool {
    const buffer = buffer_ptr[0..buffer_len];
    const root = flatbuffers.decodeRoot(
        yamori_users_acl.V1GetUsers, buffer,
    ) catch return false;

    if (getAttribute(root.user.attributes, "role")) |attr| {
        return std.mem.eql(u8, attr, "admin");
    }

    return false;
}