Skip to content

feat(providers): add WpCapabilityProvider (v1.3.0) - #12

Merged
raftaar1191 merged 1 commit into
mainfrom
release/v1.3.0
Jun 17, 2026
Merged

raftaar1191 merged 1 commit into
mainfrom
release/v1.3.0

Conversation

@raftaar1191

Copy link
Copy Markdown
Contributor

Summary

  • Adds a third built-in provider, WpCapabilityProvider (wp_capability), so the React UI's Who can access dropdown can gate a resource by one or more WordPress capability slugs (install_plugins, edit_posts, manage_options, …)
  • Capability options are discovered dynamically across every role returned by wp_roles() — plugin-registered caps (WooCommerce, Members, User Role Editor) appear automatically
  • Access semantics mirror WpRoleProvider: a user passes when user_can() returns true for any selected capability; admins bypass unconditionally
  • Two new filters expose curation points: wpb_access_control_wp_capability_options (UI list) and wpb_access_control_wp_capability_has_access (final decision)

Changes

  • src/WpCapabilityProvider.php — new provider class
  • src/AccessControlManager.php — registered alongside wp_role / wp_user
  • js/components/RoleOptionsPanel.js — UI subtitle for wp_capability
  • tests/Unit/WpCapabilityProviderTest.php — 21 new tests
  • assets/build/index.js — rebuilt via wp-scripts build
  • README.md / CHANGELOG.md — documented

Test plan

  • composer test — 116 tests / 172 assertions, all green
  • npm run build — wp-scripts compiles cleanly
  • Smoke test in a consuming plugin: dropdown → WordPress Capability → check install_plugins → save; verify GET /wpb-ac/v1/rules/{ns}/{key} returns {"key":"wp_capability","value":["install_plugins"]}
  • Confirm subscriber denied, admin bypassed, editor with install_plugins cap added passes
  • CI matrix passes on PHP 8.1 – 8.5

🤖 Generated with Claude Code

Gates resources by one or more WordPress capability slugs (install_plugins,
edit_posts, manage_options, etc.). Options are discovered dynamically across
every role returned by wp_roles() so plugin-registered caps (WooCommerce,
Members, User Role Editor) appear automatically. Access is granted when
user_can() returns true for any selected capability.

- src/WpCapabilityProvider.php — new provider class with wp_capability ID,
  dynamic options, ANY-match semantics, and two filters
  (wpb_access_control_wp_capability_options,
   wpb_access_control_wp_capability_has_access)
- src/AccessControlManager.php — registered as a default provider
- js/components/RoleOptionsPanel.js — description string for wp_capability;
  existing checkbox panel renders the new options automatically
- tests/Unit/WpCapabilityProviderTest.php — 21 new tests (identity, dedup,
  sort, falsy-cap skip, malformed roles, filter override, ANY-match
  short-circuit, empty-string skip, filter cast)
- README.md / CHANGELOG.md — documented new provider, dropdown row, and filters

PHPUnit: 116 tests / 172 assertions all green. JS assets rebuilt via wp-scripts.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@raftaar1191
raftaar1191 merged commit 77651e9 into main Jun 17, 2026
5 checks passed
@raftaar1191
raftaar1191 deleted the release/v1.3.0 branch June 17, 2026 16:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant