あなたのWordPressの残りのルートのパーミッションを処理する


我々の前のチュートリアルでregister_rest_route この行を登録関数に追加しました.
'permission_callback' => '__return_true'
これはサンドボックスコードのパーミッションの問題を防ぐためでしたが、生産環境では、完全なパブリックAPIエンドポイントのためにこれを使用するだけで、ユーザーに関連するエンドポイントのためにこれを使用することはありませんでした.
注意:あなたがパブリックAPIを構築しているならば、上記はあなたが使うべきです.

あなたのルートのパーミッションの取り扱い
ルートに対するユーザ入力の妥当性検査と同じように、パーミッションコールバックは、true、false、あるいはWpCountエラーインスタンスを返す関数です.
register_rest_route(
    'ndx/v1',
    'my-endpoint/(?P<id>[a-zA-Z0-9_-]+)',
    array(
        array(
            // ... other arguments stripped for readability
            'permission_callback' => function($request) {
                // ... permissions check goes here
            },
        )
    )
);
パーミッションコールバックは、現在のユーザが設定された後に実行されます.これは、ダッシュボード内の一致するユーザーか、リクエストで渡された認証済みのユーザーのどちらかです.これがWordPressであるので、我々の許可チェックはWordPresscurrent_user_can .
コールバックはまた、要求された全てのリクエストを受け取ります.

WordPressのユーザー機能をチェックする方法
WordPressは、ユーザが何をするのを許されるかについて扱う役割と能力システムを使用します.役割は、基本的に、あなたがすぐにユーザーに割り当てることができる能力のセットです.組み込みの役割の例は管理者、著者、エディタ、および加入者です.
能力は、ユーザーが許可されるか、するのを許されない特異な動作です.システムが付加的であるので、ユーザが能力を持っているならば、彼らは特定の行動をすることができることを意味しますcannot_do_action .
ユーザーを確認する最も簡単な方法は、current_user_can 関数.この関数は、能力にマッチし、trueまたはfalseを返します.
return current_user_can('edit_posts'); // true or false
WordPressに組み込まれているさまざまな機能があり、カスタムのものを追加することもできます.我々はリストを通過しませんが、ここでリストを表示することができますhttps://wordpress.org/support/article/roles-and-capabilities/#capabilities

許可チェックの実行
残りのルートに戻ってパーミッションチェックを追加しましょう.我々のルートがWordPressインストールのために世界的なセッティングを更新することになっていたことを理論的に言いましょう.我々は、ビルトインを使用しますmanage_options これにより、ダッシュボードのすべての設定にアクセスして更新することができます.
register_rest_route(
    'ndx/v1',
    'my-endpoint/(?P<id>[a-zA-Z0-9_-]+)',
    array(
        array(
            'permission_callback' => function($request) {
                return current_user_can('manage_options');
            },
        )
    )
);

包む
これは短いチュートリアルだったが、パーミッションの作成はかなり簡単だからだ!それは本当にちょうどあなたがあなたのユーザーシステムとセキュリティレベルを設計する方法に依存します.私は提供される能力を密接に見てお勧めします.我々はまた、将来的に政策のようなより高度なパッターのための能力を作成し、推奨プラグインを通過します.
著者
・・・アクションボタン
背景色:こっち重要
カラー:竜華ffffff!重要
ボーダーカラー:こっち重要


David Woolf フォロー
Designer and developer. Follow me on twitter: https://twitter.com/wwuulf