{"id":312411,"date":"2026-05-18T00:48:45","date_gmt":"2026-05-18T00:48:45","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/page-authority-allowed-domains\/"},"modified":"2026-05-18T03:13:37","modified_gmt":"2026-05-18T03:13:37","slug":"page-authority-allowed-domains","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/page-authority-allowed-domains\/","author":23498638,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.0.0","stable_tag":"2.0.0","tested":"6.9.4","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Page Authority - Allowed Domains","header_author":"Talisa @ Page Authority.","header_description":"Restricts WordPress user emails to an administrator-managed allowlist of approved domains.","assets_banners_color":"ffffff","last_updated":"2026-05-18 03:13:37","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/pageauthority.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":30,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"2.0.0":{"tag":"2.0.0","author":"twestford","date":"2026-05-18 03:13:37"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3535014,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3535014,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3535014,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3535014,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["2.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3535029,"resolution":"1","location":"assets","locale":"","width":2560,"height":1014},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3535029,"resolution":"2","location":"assets","locale":"","width":2361,"height":317},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3535029,"resolution":"3","location":"assets","locale":"","width":2367,"height":257},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3535029,"resolution":"4","location":"assets","locale":"","width":651,"height":448},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3535029,"resolution":"5","location":"assets","locale":"","width":2365,"height":217}},"screenshots":{"1":"The Allowed Domains settings page where administrators manage the email domain allowlist, with optional login enforcement and an existing user audit.","2":"Inline admin error shown when an administrator attempts to add a user with an unauthorized email domain.","3":"The Existing User Audit identifies users whose email domains are not currently approved and offers per-user actions.","4":"Content reassignment modal appears when deleting an unauthorized user who owns posts or pages.","5":"Recent allowlist changes log tracks who modified the allowlist and when."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[3013,267,603,600,1917],"plugin_category":[41,54,58],"plugin_contributors":[263303],"plugin_business_model":[],"class_list":["post-312411","plugin","type-plugin","status-publish","hentry","plugin_tags-domains","plugin_tags-email","plugin_tags-registration","plugin_tags-security","plugin_tags-users","plugin_category-communication","plugin_category-security-and-spam-protection","plugin_category-user-management","plugin_contributors-twestford","plugin_committers-twestford"],"banners":{"banner":"https:\/\/ps.w.org\/page-authority-allowed-domains\/assets\/banner-772x250.png?rev=3535014","banner_2x":"https:\/\/ps.w.org\/page-authority-allowed-domains\/assets\/banner-1544x500.png?rev=3535014","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/page-authority-allowed-domains\/assets\/icon-128x128.png?rev=3535014","icon_2x":"https:\/\/ps.w.org\/page-authority-allowed-domains\/assets\/icon-256x256.png?rev=3535014","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/page-authority-allowed-domains\/assets\/screenshot-1.png?rev=3535029","caption":"The Allowed Domains settings page where administrators manage the email domain allowlist, with optional login enforcement and an existing user audit."},{"src":"https:\/\/ps.w.org\/page-authority-allowed-domains\/assets\/screenshot-2.png?rev=3535029","caption":"Inline admin error shown when an administrator attempts to add a user with an unauthorized email domain."},{"src":"https:\/\/ps.w.org\/page-authority-allowed-domains\/assets\/screenshot-3.png?rev=3535029","caption":"The Existing User Audit identifies users whose email domains are not currently approved and offers per-user actions."},{"src":"https:\/\/ps.w.org\/page-authority-allowed-domains\/assets\/screenshot-4.png?rev=3535029","caption":"Content reassignment modal appears when deleting an unauthorized user who owns posts or pages."},{"src":"https:\/\/ps.w.org\/page-authority-allowed-domains\/assets\/screenshot-5.png?rev=3535029","caption":"Recent allowlist changes log tracks who modified the allowlist and when."}],"raw_content":"<!--section=description-->\n<p>Allowed Email Domains gives administrators a simple way to restrict WordPress user accounts to approved email domains.<\/p>\n\n<p>The plugin is designed for sites where only users from specific organizations, companies, clients, or teams should be added as WordPress users.<\/p>\n\n<p>Features include:<\/p>\n\n<ul>\n<li>Admin-managed allowed domain list<\/li>\n<li>Standard WordPress registration enforcement<\/li>\n<li>REST API user creation\/update enforcement<\/li>\n<li>WooCommerce registration enforcement<\/li>\n<li>Existing User Audit tools<\/li>\n<li>Optional login enforcement<\/li>\n<li>Per-user unauthorized account removal with content reassignment<\/li>\n<li>Multisite-aware protections<\/li>\n<li>Lightweight architecture with no custom database tables<\/li>\n<\/ul>\n\n<h3>Security Notes<\/h3>\n\n<p>The plugin includes:<\/p>\n\n<ul>\n<li>Capability checks<\/li>\n<li>Nonce verification (verified before any state-changing logic runs)<\/li>\n<li>Sanitization and escaping<\/li>\n<li>Live revalidation before destructive actions<\/li>\n<li>Current-admin protection<\/li>\n<li>Multisite Super Admin protection<\/li>\n<li>Explicit content reassignment or delete confirmation before user removal<\/li>\n<\/ul>\n\n<p>Recommended operational practices:<\/p>\n\n<ul>\n<li>Review the Existing User Audit before enabling login blocking<\/li>\n<li>Test custom registration and SSO flows before production rollout<\/li>\n<li>Maintain regular database backups before deleting users<\/li>\n<li>Restrict plugin management access to trusted administrators only<\/li>\n<\/ul>\n\n<h3>Uninstall<\/h3>\n\n<p>Deleting the plugin removes its current options:<\/p>\n\n<ul>\n<li><code>pageauth_allowed_domains<\/code><\/li>\n<li><code>pageauth_audit_log<\/code><\/li>\n<li><code>pageauth_block_unauthorized_logins<\/code><\/li>\n<\/ul>\n\n<p>It also cleans up internal flags, transients, user meta, and any leftover keys from prior plugin versions that used the <code>paad_<\/code> or <code>aed_<\/code> prefixes. On multisite, the matching network options are removed as well.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the zip file to <code>wp-content\/plugins\/<\/code><\/li>\n<li>Activate <strong>Allowed Email Domains<\/strong> in WordPress Admin<\/li>\n<li>Go to <strong>Users &gt; Allowed Domains<\/strong><\/li>\n<li>Add approved domains, one per line<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"what%20format%20should%20allowed%20domains%20use%3F\"><h3>What format should allowed domains use?<\/h3><\/dt>\n<dd><p>Enter one domain per line. Domains are normalized to begin with <code>@<\/code>.<\/p>\n\n<p>Example:<\/p>\n\n<pre><code>@example.com\n@company.org\n@agency.net\n<\/code><\/pre><\/dd>\n<dt id=\"what%20happens%20if%20the%20allowlist%20is%20empty%3F\"><h3>What happens if the allowlist is empty?<\/h3><\/dt>\n<dd><p>If the allowlist is empty, all email domains are allowed.<\/p><\/dd>\n<dt id=\"does%20this%20affect%20existing%20users%3F\"><h3>Does this affect existing users?<\/h3><\/dt>\n<dd><p>Existing users are not automatically disabled, deleted, modified, or logged out.<\/p>\n\n<p>The Existing User Audit identifies existing users whose email domains are not currently allowed. Administrators can review those users individually.<\/p><\/dd>\n<dt id=\"can%20unauthorized%20users%20be%20deleted%3F\"><h3>Can unauthorized users be deleted?<\/h3><\/dt>\n<dd><p>Yes. The audit table includes per-user delete actions for unauthorized users.<\/p>\n\n<p>When a user owns posts or pages, a confirmation modal appears with a dropdown of compliant users (those whose email is on the allowlist) for content reassignment. Administrators can also choose to delete the user and all their content.<\/p>\n\n<p>Deletion actions are protected by nonce verification, capability checks, confirmation prompts, current-admin protection, multisite Super Admin protection, and a server-side failsafe that refuses to silently delete a user's content.<\/p><\/dd>\n<dt id=\"can%20users%20with%20unauthorized%20domains%20be%20blocked%20from%20logging%20in%3F\"><h3>Can users with unauthorized domains be blocked from logging in?<\/h3><\/dt>\n<dd><p>Yes. Optional login enforcement can be enabled after reviewing the Existing User Audit.<\/p>\n\n<p>Login enforcement is disabled by default to avoid accidental lockouts.<\/p><\/dd>\n<dt id=\"does%20this%20plugin%20create%20custom%20database%20tables%3F\"><h3>Does this plugin create custom database tables?<\/h3><\/dt>\n<dd><p>No. The plugin stores settings using WordPress options and does not create custom database tables.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Compliance: renamed internal prefix from <code>paad_<\/code> (4 characters) to <code>pageauth_<\/code> (8 characters) across functions, constants, options, transients, user meta, nonces, AJAX actions, hooks, page slug, CSS classes, HTML IDs, and JavaScript data attributes. The new prefix is unique, brand-aligned, and far less likely to collide with any other plugin<\/li>\n<li>Migration: existing allowlist, audit log, and login-blocking preference are migrated transparently on upgrade from either prior prefix (<code>paad_<\/code> from 1.9.1 or <code>aed_<\/code> from 1.9.0 and earlier)<\/li>\n<li>Compatibility: both legacy settings URLs (<code>users.php?page=aed-settings<\/code> and <code>users.php?page=paad-settings<\/code>) now redirect to the current <code>pageauth-settings<\/code> slug<\/li>\n<li>Cleanup: <code>uninstall.php<\/code> removes both the current and all legacy option, transient, and user-meta keys, so removal is clean regardless of which version was last installed<\/li>\n<\/ul>\n\n<h4>1.9.1<\/h4>\n\n<ul>\n<li>Compliance: renamed internal prefix from <code>aed_<\/code> (3 characters) to <code>paad_<\/code> (4 characters) across functions, constants, options, transients, nonces, AJAX actions, page slug, CSS classes, and HTML IDs to meet WordPress.org Plugin Directory naming requirements.<\/li>\n<li>Migration: existing allowlist, audit log, and login-blocking preference are migrated transparently on upgrade.<\/li>\n<li>Compatibility: legacy <code>users.php?page=aed-settings<\/code> URL now redirects to the new <code>paad-settings<\/code> slug.<\/li>\n<li>Cleanup: rewrote <code>uninstall.php<\/code> to actually remove the options the plugin stores (the previous file targeted a key prefix that was never written), and added cleanup for legacy <code>aed_*<\/code> keys.<\/li>\n<\/ul>\n\n<h4>1.9.0<\/h4>\n\n<ul>\n<li>Security: nonce verification now runs before capability checks and before any input processing in the audit-domain-add and user-delete handlers<\/li>\n<li>Security: programmatic user creation in admin context (admin-ajax, importers, REST in admin) is no longer silently allowed; only the user-edit\/user-new screens defer to the inline error path<\/li>\n<li>Performance: existing-user audit query is paginated to avoid loading every user into memory on large sites<\/li>\n<li>Feature: deleting an unauthorized user who owns posts or pages now opens a confirmation modal with a dropdown of compliant users for content reassignment, or an explicit \"delete content\" option<\/li>\n<li>Feature: success notice when a domain is added directly from the audit<\/li>\n<li>Feature: clearer error notices for delete failures (missing user, current user, super admin, allowed-now, content-without-confirmation, invalid reassignment target)<\/li>\n<li>Hardening: server-side failsafe refuses to delete a user with owned content unless reassignment or explicit content-delete is specified<\/li>\n<li>Hardening: reassignment target is revalidated as a real, compliant user before deletion proceeds<\/li>\n<li>Cleanup: removed dead query-parameter handling, consistent input handling throughout<\/li>\n<\/ul>\n\n<h4>1.8.15<\/h4>\n\n<ul>\n<li>Removed redundant GitHub plugin site link from the Plugins screen.<\/li>\n<\/ul>\n\n<h4>1.8.14<\/h4>\n\n<ul>\n<li>Added GitHub plugin metadata link on the WordPress Plugins screen.<\/li>\n<li>Added Page Authority author URL metadata.<\/li>\n<\/ul>\n\n<h4>1.8.12<\/h4>\n\n<ul>\n<li>Cleaned and consolidated changelog entries<\/li>\n<\/ul>\n\n<h4>1.8.11<\/h4>\n\n<ul>\n<li>Updated WordPress.org plugin slug and text domain compatibility<\/li>\n<li>Fixed automated scan compatibility issues<\/li>\n<\/ul>\n\n<h4>1.8.9<\/h4>\n\n<ul>\n<li>Renamed plugin to \"Page Authority - Allowed Domains\"<\/li>\n<\/ul>\n\n<h4>1.8.2<\/h4>\n\n<ul>\n<li>Added unauthorized user audit tools<\/li>\n<li>Added quick actions for adding domains and deleting users<\/li>\n<\/ul>\n\n<h4>1.8.1<\/h4>\n\n<ul>\n<li>Added login enforcement protections for unauthorized domains<\/li>\n<\/ul>\n\n<h4>1.8.0<\/h4>\n\n<ul>\n<li>Added WooCommerce, REST API, and multisite enforcement support<\/li>\n<\/ul>\n\n<h4>1.7.0<\/h4>\n\n<ul>\n<li>Added GitHub update compatibility support<\/li>\n<li>Improved admin navigation and documentation<\/li>\n<\/ul>\n\n<h4>1.6.0<\/h4>\n\n<ul>\n<li>Improved validation, admin UX, and security handling<\/li>\n<\/ul>\n\n<h4>1.5.0<\/h4>\n\n<ul>\n<li>Added uninstall cleanup and compatibility metadata<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial plugin release<\/li>\n<\/ul>","raw_excerpt":"Restrict WordPress user accounts to administrator-approved email domains.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/312411","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=312411"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/twestford"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=312411"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=312411"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=312411"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=312411"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=312411"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=312411"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}