PHPackages                             arraypress/wp-user-access - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. arraypress/wp-user-access

ActiveLibrary

arraypress/wp-user-access
=========================

A lean WordPress library for user access control, roles, and capabilities

00PHP

Since Nov 16Pushed 6mo agoCompare

[ Source](https://github.com/arraypress/wp-user-access)[ Packagist](https://packagist.org/packages/arraypress/wp-user-access)[ RSS](/packages/arraypress-wp-user-access/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependenciesVersions (1)Used By (0)

WordPress User Access Utilities
===============================

[](#wordpress-user-access-utilities)

A lean WordPress library for user access control, roles, and capabilities. Simple APIs for the permission management tasks you actually need in plugin development.

Features
--------

[](#features)

- 🎯 **Focused API** - Just the methods you'll actually use
- 👤 **User Checks** - Simple permission and role verification
- 🔐 **Role Management** - Create, delete, and modify roles
- 💪 **Capability Control** - Add/remove capabilities from roles
- 📋 **Form Options** - Ready-to-use arrays for dropdowns
- 🔍 **User Queries** - Find users by role or capability

Requirements
------------

[](#requirements)

- PHP 7.4 or later
- WordPress 5.0 or later

Installation
------------

[](#installation)

```
composer require arraypress/wp-user-access
```

Usage
-----

[](#usage)

### User Class - Check and manage user permissions

[](#user-class---check-and-manage-user-permissions)

```
use ArrayPress\WPUserAccess\User;

// Check roles and capabilities
if ( User::has_role( 'editor', $user_id ) ) {
    // User is an editor
}

if ( User::has_capability( 'edit_posts', $user_id ) ) {
    // User can edit posts
}

// Check multiple permissions (has ANY of these)
if ( User::has_any( ['administrator', 'editor', 'manage_options'], $user_id ) ) {
    // User has at least one permission
}

// Check multiple permissions (has ALL of these)
if ( User::has_all( ['edit_posts', 'upload_files'], $user_id ) ) {
    // User has all permissions
}

// Quick admin checks
if ( User::is_admin( $user_id ) ) {
    // User can manage options
}

if ( User::can_edit_others( $user_id ) ) {
    // User can edit others' posts
}

// Manage user roles
User::set_role( 'editor', $user_id );      // Replace all roles
User::add_role( 'author', $user_id );      // Add additional role
User::remove_role( 'subscriber', $user_id ); // Remove role

// Get user roles
$roles = User::get_roles( $user_id );
```

### Role Class - Manage role capabilities

[](#role-class---manage-role-capabilities)

```
use ArrayPress\WPUserAccess\Role;

// Check if role exists
if ( Role::exists( 'shop_manager' ) ) {
    // Role exists
}

// Create custom role
$role = Role::create( 'shop_manager', 'Shop Manager', [
    'read'         => true,
    'edit_posts'   => true,
    'upload_files' => true,
] );

// Delete role (e.g., on plugin uninstall)
Role::delete( 'shop_manager' );

// Manage capabilities
Role::add_capability( 'editor', 'manage_shop' );
Role::remove_capability( 'editor', 'delete_pages' );

// Check role capabilities
if ( Role::has_capability( 'editor', 'edit_posts' ) ) {
    // Editor can edit posts
}

// Get all capabilities for a role
$capabilities = Role::get_capabilities( 'editor' );
```

### Capability Class - Work with capabilities

[](#capability-class---work-with-capabilities)

```
use ArrayPress\WPUserAccess\Capability;

// Check if capability exists
if ( Capability::exists( 'manage_shop' ) ) {
    // Capability is registered
}

// Find which roles have a capability
$roles = Capability::get_roles_with( 'edit_posts' );
// Returns: ['administrator', 'editor', 'author']
```

### Query Class - Find users

[](#query-class---find-users)

```
use ArrayPress\WPUserAccess\Query;

// Get users by role
$editors = Query::get_users_with_role( 'editor' );
$staff   = Query::get_users_with_role( ['editor', 'administrator'] );

// Get users by capability
$can_manage = Query::get_users_with_capability( 'manage_options' );

// Count users in a role
$count = Query::count_users_with_role( 'subscriber' );

// Get all roles or capabilities
$all_roles = Query::get_all_roles();
// Returns: ['administrator' => 'Administrator', 'editor' => 'Editor', ...]

$all_caps = Query::get_all_capabilities();
// Returns: ['edit_posts', 'publish_posts', 'upload_files', ...]
```

### Options Class - Form helpers

[](#options-class---form-helpers)

```
use ArrayPress\WPUserAccess\Options;

// Get role options for dropdowns (simple format)
$roles = Options::get_roles();
// Returns: ['administrator' => 'Administrator', 'editor' => 'Editor', ...]

// Get role options in value/label format
$roles = Options::get_roles( ['format' => 'value_label'] );
// Returns: [['value' => 'editor', 'label' => 'Editor'], ...]

// Get capability options
$caps = Options::get_capabilities();
// Returns: ['edit_posts' => 'Edit Posts', 'publish_posts' => 'Publish Posts', ...]

// Get only editable roles (respects current user permissions)
$editable = Options::get_editable_roles();
```

### Utils Class - Helper functions

[](#utils-class---helper-functions)

```
use ArrayPress\WPUserAccess\Utils;

// Check if current user can edit another user
if ( Utils::current_user_can_edit_user( $user_id ) ) {
    // Show edit button
}

// Get user object (with fallback to current user)
$user = Utils::get_user( $user_id );
```

Common Patterns
---------------

[](#common-patterns)

### Custom Post Type Permissions

[](#custom-post-type-permissions)

```
// On activation - create role
Role::create( 'product_manager', 'Product Manager', [
    'read'                => true,
    'edit_products'       => true,
    'edit_others_products'=> true,
    'publish_products'    => true,
    'delete_products'     => true,
] );

// Add capabilities to existing roles
Role::add_capability( 'administrator', 'edit_products' );
Role::add_capability( 'editor', 'edit_products' );
```

### Settings Page Access

[](#settings-page-access)

```
// Check permissions
if ( ! User::is_admin() ) {
    wp_die( 'Access denied' );
}

// Or check specific capability
if ( ! User::has_capability( 'manage_shop' ) ) {
    wp_die( 'Access denied' );
}
```

### User Edit Screen

[](#user-edit-screen)

```
// Get roles for dropdown
$roles = Options::get_editable_roles();
?>
