arraypress/wp-capabilities-utils

A lean WordPress library for working with capabilities and permissions

dev-main 2025-07-02 21:22 UTC

This package is auto-updated.

Last update: 2025-09-02 14:48:34 UTC


README

A lightweight WordPress library for working with capabilities and permissions. Provides clean APIs for capability analysis, user permission auditing, and capability management.

Features

  • 🎯 Clean API: WordPress-style snake_case methods with consistent interfaces
  • 🔍 Capability Analysis: System-wide capability discovery and categorization
  • 👥 User Comparisons: Compare and analyze user permissions
  • 📊 Permission Auditing: Find users/roles with specific capabilities
  • 📋 Form-Ready Options: Perfect value/label arrays for selects and forms
  • 🔍 Search Functionality: Built-in capability search

Requirements

  • PHP 7.4 or later
  • WordPress 5.0 or later

Installation

composer require arraypress/wp-capabilities-utils

Basic Usage

Working with Single Capabilities

use ArrayPress\CapabilitiesUtils\Capability;

// Check if capability exists
if ( Capability::exists( 'edit_posts' ) ) {
	// Capability exists
}

// Check user capability
if ( Capability::user_has( 'edit_posts', 123 ) ) {
	// User has capability
}

// Format capability name for display
$formatted = Capability::format_name( 'edit_posts' ); // "Edit Posts"

// Get capability type/category
$type = Capability::get_type( 'edit_posts' ); // "post"

// Find users with capability
$user_ids = Capability::get_users_with( 'edit_posts' );

// Check which users from list have capability
$filtered_users = Capability::users_have( 'edit_posts', [ 1, 2, 3 ] );

// Find roles with capability
$roles = Capability::get_roles_with( 'edit_posts' ); // ['editor', 'administrator']

// Check if capability is primitive
if ( Capability::is_primitive( 'edit_posts' ) ) {
	// Not a meta capability
}

// Get as option array
$option = Capability::get_option( 'edit_posts' );
// Returns: ['value' => 'edit_posts', 'label' => 'Edit Posts']

Working with Multiple Capabilities

use ArrayPress\CapabilitiesUtils\Capabilities;

// Get all capabilities
$all_caps = Capabilities::get();

// Check which capabilities exist
$existing = Capabilities::exists( [ 'edit_posts', 'invalid_cap', 'publish_posts' ] );

// Get primitive capabilities only
$primitive = Capabilities::get_primitive();

// Get capabilities by type
$post_caps = Capabilities::get_by_type( 'post' );
$user_caps = Capabilities::get_by_type( 'user' );

// User capability operations
$user_caps      = Capabilities::get_for_user( 123 );
$multiple_users = Capabilities::get_for_users( [ 1, 2, 3 ] );

// Check user capabilities
if ( Capabilities::user_has_any( [ 'edit_posts', 'edit_pages' ], 123 ) ) {
	// User has at least one capability
}

if ( Capabilities::user_has_all( [ 'edit_posts', 'publish_posts' ], 123 ) ) {
	// User has all capabilities
}

// Compare users
$comparison = Capabilities::compare_users( 123, 456 );
// Returns: ['common' => [...], 'only_user1' => [...], 'only_user2' => [...]]

// Find common capabilities
$common = Capabilities::get_common( [ 1, 2, 3 ] );

// Get capability options
$options = Capabilities::get_options();
// Returns: [['value' => 'edit_posts', 'label' => 'Edit Posts'], ...]

// Grouped by type
$grouped = Capabilities::get_options( true );
// Returns: ['post' => [...], 'user' => [...], ...]

// Simple key-value options
$simple = Capabilities::get_simple_options();
// Returns: ['edit_posts' => 'Edit Posts', ...]

// Search capabilities
$results        = Capabilities::search( 'edit' );
$search_options = Capabilities::search_options( 'post' );

// Sanitize capabilities
$clean_caps = Capabilities::sanitize( [ 'edit_posts', 'invalid', 'publish_posts' ] );

Capability Analysis

// System-wide capability discovery
$all_capabilities = Capabilities::get();
$primitive_only   = Capabilities::get_primitive();

// Categorize capabilities
$post_related  = Capabilities::get_by_type( 'post' );
$admin_related = Capabilities::get_by_type( 'core' );

// User permission auditing
$admin_users  = Capability::get_users_with( 'manage_options' );
$editor_roles = Capability::get_roles_with( 'edit_others_posts' );

// Permission comparison
$user_comparison    = Capabilities::compare_users( 123, 456 );
$shared_permissions = Capabilities::get_common( [ 1, 2, 3, 4 ] );

Form Integration

// Capability select options
$capability_options = Capabilities::get_options();

// Grouped by category
$grouped_options = Capabilities::get_options( true );

// Simple dropdown
$simple_select = Capabilities::get_simple_options();

// Search-based selection
$search_results = Capabilities::search_options( 'edit' );

Key Features

  • Value/Label Format: Perfect for forms and selects
  • Capability Analysis: System-wide capability discovery
  • User Auditing: Find users with specific permissions
  • Permission Comparison: Compare capabilities between users
  • Search Functionality: Built-in capability search
  • Type Categorization: Group capabilities by function

Requirements

  • PHP 7.4+
  • WordPress 5.0+

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

This project is licensed under the GPL-2.0-or-later License.

Support