Permission callbacks check if a user can do something before allowing it. This keeps your site safe and controls access.
Permission callbacks in Wordpress
register_rest_route( 'namespace/v1', '/route', array( 'methods' => 'GET', 'callback' => 'your_callback_function', 'permission_callback' => 'your_permission_function', ));
The permission_callback is a function that returns true if the user can access, or false if not.
If you do not set permission_callback, WordPress will block access by default for security.
function check_user_permission() {
return current_user_can('edit_posts');
}
register_rest_route('myplugin/v1', '/data', array(
'methods' => 'GET',
'callback' => 'get_data',
'permission_callback' => 'check_user_permission',
));register_rest_route('myplugin/v1', '/public', array( 'methods' => 'GET', 'callback' => 'public_data', 'permission_callback' => '__return_true', ));
function deny_access() {
return false;
}
register_rest_route('myplugin/v1', '/secret', array(
'methods' => 'GET',
'callback' => 'secret_data',
'permission_callback' => 'deny_access',
));This code creates a REST API endpoint at /wp-json/myplugin/v1/secret-message. Only users who can manage options (usually admins) can get the secret message. Others get a permission error.
<?php
function myplugin_permission_check() {
// Only allow users who can manage options (usually admins)
return current_user_can('manage_options');
}
function myplugin_get_secret_message() {
return 'This is a secret message for admins only.';
}
add_action('rest_api_init', function () {
register_rest_route('myplugin/v1', '/secret-message', array(
'methods' => 'GET',
'callback' => 'myplugin_get_secret_message',
'permission_callback' => 'myplugin_permission_check',
));
});Always use permission callbacks to protect your REST API endpoints.
Use WordPress functions like current_user_can() inside your permission callback to check user roles or capabilities.
If your permission callback returns false, WordPress sends a 403 Forbidden error automatically.
Permission callbacks control who can access REST API routes.
They return true to allow access or false to block it.
Use WordPress capability checks inside permission callbacks for security.