Make WordPress Core

Opened 6 weeks ago

Last modified 6 weeks ago

#63536 new enhancement

Super Admin Functions Network ID Support

Reported by: spenserhale's profile spenserhale Owned by:
Milestone: Awaiting Review Priority: normal
Severity: normal Version:
Component: Networks and Sites Keywords: has-patch has-unit-tests
Focuses: multisite Cc:

Description

Multisite installs that host multiple networks currently treat all super-admin functions as being tied to the primary network. This limits enterprise-scale setups (e.g., SaaS platforms that shard customers into separate networks)

The patch introduces first-class, backward-compatible support for a $network_id argument in four super-admin helpers, allowing each network to maintain an independent site_admins list while preserving legacy behavior.

Scope of Code Changes
The four helpers—get_super_admins(), is_super_admin(), grant_super_admin(), and revoke_super_admin()—now accept an optional $network_id parameter.
They now call get_network_option() / update_network_option() when a network ID is supplied; otherwise they keep using the current network (maintaining old behaviour).
Early returns and the global $super_admins override are preserved exactly as before.

Design and Back-Compatibility
Calling without $network_id still works exactly as today.
Calling with a specific $network_id now targets that network’s site_admins row.
If $GLOBALSsuper_admins? is defined, it still overrides everything and the new code short-circuits.
Plugin hooks (grant_super_admin, granted_super_admin, revoke_super_admin, revoked_super_admin) now receive $network_id as a second argument, but positional callbacks remain compatible.

All DocBlocks have been updated to describe the new parameter.
Hook signatures are extended but remain backward-compatible.
The change is fully transparent unless developers opt into the new argument.

Change History (2)

This ticket was mentioned in PR #8921 on WordPress/wordpress-develop by @spenserhale.


6 weeks ago
#1

  • Keywords has-patch has-unit-tests added

Trac ticket: https://core.trac.wordpress.org/ticket/63536#ticket

Multisite installs that host multiple networks currently treat all super-admin functions as being tied to the primary network. This limits enterprise-scale setups (e.g., SaaS platforms that shard customers into separate networks)

The patch introduces first-class, backward-compatible support for a $network_id argument in four super-admin helpers, allowing each network to maintain an independent site_admins list while preserving legacy behavior.

Scope of Code Changes
The four helpers—get_super_admins(), is_super_admin(), grant_super_admin(), and revoke_super_admin()—now accept an optional $network_id parameter.
They now call get_network_option() / update_network_option() when a network ID is supplied; otherwise they keep using the current network (maintaining old behaviour).
Early returns and the global $super_admins override are preserved exactly as before.

Design and Back-Compatibility
Calling without $network_id still works exactly as today.
Calling with a specific $network_id now targets that network’s site_admins row.
If $GLOBALSsuper_admins? is defined, it still overrides everything and the new code short-circuits.
Plugin hooks (grant_super_admin, granted_super_admin, revoke_super_admin, revoked_super_admin) now receive $network_id as a second argument, but positional callbacks remain compatible.

All DocBlocks have been updated to describe the new parameter.
Hook signatures are extended but remain backward-compatible.
The change is fully transparent unless developers opt into the new argument.
Created new tests to test functionality.

@audrasjb commented on PR #8921:


6 weeks ago
#2

Thanks for the PR! There are some coding standards issue to fix, see https://github.com/WordPress/wordpress-develop/pull/8921/files for the reported errors :)

Note: See TracTickets for help on using tickets.