権限トークン

トークン型は、確認済みの権限の証明としてうまく機能します。

// Copyright 2025 Google LLC
// SPDX-License-Identifier: Apache-2.0

mod admin {
    pub struct AdminToken(());

    pub fn get_admin(password: &str) -> Option<AdminToken> {
        if password == "Password123" { Some(AdminToken(())) } else { None }
    }
}

// 権限があることを確認する必要はありません。
// `AdminToken` 引数が、そのような確認と同等だからです。
pub fn add_moderator(_: &admin::AdminToken, user: &str) {}

fn main() {
    if let Some(token) = admin::get_admin("Password123") {
        add_moderator(&token, "CoolUser");
    } else {
        eprintln!("パスワードが正しくありません。権限を証明できませんでした。")
    }
}
  • この例では、パスワードによってチャット クライアントの管理者権限を取得し、それらの 権限を取得した後にユーザーへモデレーター権限を与えることをモデル化しています。 AdminToken 型は、「ユーザーが正しい権限を持っていることの証明」として 機能します。

    コード内でユーザーにパスワードの入力を求め、パスワードが正しければ、 特定の環境(ここではチャットクライアント)内で管理者アクションを実行するための AdminToken を取得します。

    権限を取得したら、add_moderator 関数を呼び出せます。

    このトークン型なしではその関数を呼び出せないため、 そもそも呼び出せるということ自体から、権限を持っているとみなせます。

  • 実演: main でもう一度 AdminToken を構築しようとしてみてください。これは、 有用なトークンの基盤が、それらを任意に 構築できないようにすることにあると改めて示すためです。