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;
}