{"id":36389751,"url":"https://github.com/arraypress/wp-user-access","last_synced_at":"2026-01-14T01:31:48.430Z","repository":{"id":331889176,"uuid":"1097505052","full_name":"arraypress/wp-user-access","owner":"arraypress","description":"A lean WordPress library for user access control, roles, and capabilities.","archived":false,"fork":false,"pushed_at":"2025-11-16T10:09:28.000Z","size":7,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-11T17:45:04.748Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/arraypress.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-16T10:08:24.000Z","updated_at":"2025-11-16T10:09:32.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/arraypress/wp-user-access","commit_stats":null,"previous_names":["arraypress/wp-user-access"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/arraypress/wp-user-access","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arraypress%2Fwp-user-access","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arraypress%2Fwp-user-access/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arraypress%2Fwp-user-access/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arraypress%2Fwp-user-access/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/arraypress","download_url":"https://codeload.github.com/arraypress/wp-user-access/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arraypress%2Fwp-user-access/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28408354,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T00:40:43.272Z","status":"ssl_error","status_checked_at":"2026-01-14T00:40:42.636Z","response_time":56,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-11T15:50:30.234Z","updated_at":"2026-01-14T01:31:48.383Z","avatar_url":"https://github.com/arraypress.png","language":"PHP","readme":"# WordPress User Access Utilities\n\nA lean WordPress library for user access control, roles, and capabilities. Simple APIs for the permission management tasks you actually need in plugin development.\n\n## Features\n\n* 🎯 **Focused API** - Just the methods you'll actually use\n* 👤 **User Checks** - Simple permission and role verification\n* 🔐 **Role Management** - Create, delete, and modify roles\n* 💪 **Capability Control** - Add/remove capabilities from roles\n* 📋 **Form Options** - Ready-to-use arrays for dropdowns\n* 🔍 **User Queries** - Find users by role or capability\n\n## Requirements\n\n* PHP 7.4 or later\n* WordPress 5.0 or later\n\n## Installation\n\n```bash\ncomposer require arraypress/wp-user-access\n```\n\n## Usage\n\n### User Class - Check and manage user permissions\n\n```php\nuse ArrayPress\\WPUserAccess\\User;\n\n// Check roles and capabilities\nif ( User::has_role( 'editor', $user_id ) ) {\n    // User is an editor\n}\n\nif ( User::has_capability( 'edit_posts', $user_id ) ) {\n    // User can edit posts\n}\n\n// Check multiple permissions (has ANY of these)\nif ( User::has_any( ['administrator', 'editor', 'manage_options'], $user_id ) ) {\n    // User has at least one permission\n}\n\n// Check multiple permissions (has ALL of these)\nif ( User::has_all( ['edit_posts', 'upload_files'], $user_id ) ) {\n    // User has all permissions\n}\n\n// Quick admin checks\nif ( User::is_admin( $user_id ) ) {\n    // User can manage options\n}\n\nif ( User::can_edit_others( $user_id ) ) {\n    // User can edit others' posts\n}\n\n// Manage user roles\nUser::set_role( 'editor', $user_id );      // Replace all roles\nUser::add_role( 'author', $user_id );      // Add additional role\nUser::remove_role( 'subscriber', $user_id ); // Remove role\n\n// Get user roles\n$roles = User::get_roles( $user_id );\n```\n\n### Role Class - Manage role capabilities\n\n```php\nuse ArrayPress\\WPUserAccess\\Role;\n\n// Check if role exists\nif ( Role::exists( 'shop_manager' ) ) {\n    // Role exists\n}\n\n// Create custom role\n$role = Role::create( 'shop_manager', 'Shop Manager', [\n    'read'         =\u003e true,\n    'edit_posts'   =\u003e true,\n    'upload_files' =\u003e true,\n] );\n\n// Delete role (e.g., on plugin uninstall)\nRole::delete( 'shop_manager' );\n\n// Manage capabilities\nRole::add_capability( 'editor', 'manage_shop' );\nRole::remove_capability( 'editor', 'delete_pages' );\n\n// Check role capabilities\nif ( Role::has_capability( 'editor', 'edit_posts' ) ) {\n    // Editor can edit posts\n}\n\n// Get all capabilities for a role\n$capabilities = Role::get_capabilities( 'editor' );\n```\n\n### Capability Class - Work with capabilities\n\n```php\nuse ArrayPress\\WPUserAccess\\Capability;\n\n// Check if capability exists\nif ( Capability::exists( 'manage_shop' ) ) {\n    // Capability is registered\n}\n\n// Find which roles have a capability\n$roles = Capability::get_roles_with( 'edit_posts' );\n// Returns: ['administrator', 'editor', 'author']\n```\n\n### Query Class - Find users\n\n```php\nuse ArrayPress\\WPUserAccess\\Query;\n\n// Get users by role\n$editors = Query::get_users_with_role( 'editor' );\n$staff   = Query::get_users_with_role( ['editor', 'administrator'] );\n\n// Get users by capability\n$can_manage = Query::get_users_with_capability( 'manage_options' );\n\n// Count users in a role\n$count = Query::count_users_with_role( 'subscriber' );\n\n// Get all roles or capabilities\n$all_roles = Query::get_all_roles();\n// Returns: ['administrator' =\u003e 'Administrator', 'editor' =\u003e 'Editor', ...]\n\n$all_caps = Query::get_all_capabilities();\n// Returns: ['edit_posts', 'publish_posts', 'upload_files', ...]\n```\n\n### Options Class - Form helpers\n\n```php\nuse ArrayPress\\WPUserAccess\\Options;\n\n// Get role options for dropdowns (simple format)\n$roles = Options::get_roles();\n// Returns: ['administrator' =\u003e 'Administrator', 'editor' =\u003e 'Editor', ...]\n\n// Get role options in value/label format\n$roles = Options::get_roles( ['format' =\u003e 'value_label'] );\n// Returns: [['value' =\u003e 'editor', 'label' =\u003e 'Editor'], ...]\n\n// Get capability options\n$caps = Options::get_capabilities();\n// Returns: ['edit_posts' =\u003e 'Edit Posts', 'publish_posts' =\u003e 'Publish Posts', ...]\n\n// Get only editable roles (respects current user permissions)\n$editable = Options::get_editable_roles();\n```\n\n### Utils Class - Helper functions\n\n```php\nuse ArrayPress\\WPUserAccess\\Utils;\n\n// Check if current user can edit another user\nif ( Utils::current_user_can_edit_user( $user_id ) ) {\n    // Show edit button\n}\n\n// Get user object (with fallback to current user)\n$user = Utils::get_user( $user_id );\n```\n\n## Common Patterns\n\n### Custom Post Type Permissions\n\n```php\n// On activation - create role\nRole::create( 'product_manager', 'Product Manager', [\n    'read'                =\u003e true,\n    'edit_products'       =\u003e true,\n    'edit_others_products'=\u003e true,\n    'publish_products'    =\u003e true,\n    'delete_products'     =\u003e true,\n] );\n\n// Add capabilities to existing roles\nRole::add_capability( 'administrator', 'edit_products' );\nRole::add_capability( 'editor', 'edit_products' );\n```\n\n### Settings Page Access\n\n```php\n// Check permissions\nif ( ! User::is_admin() ) {\n    wp_die( 'Access denied' );\n}\n\n// Or check specific capability\nif ( ! User::has_capability( 'manage_shop' ) ) {\n    wp_die( 'Access denied' );\n}\n```\n\n### User Edit Screen\n\n```php\n// Get roles for dropdown\n$roles = Options::get_editable_roles();\n?\u003e\n\u003cselect name=\"role\"\u003e\n    \u003c?php foreach ( $roles as $role =\u003e $name ) : ?\u003e\n        \u003coption value=\"\u003c?php echo esc_attr( $role ); ?\u003e\"\u003e\n            \u003c?php echo esc_html( $name ); ?\u003e\n        \u003c/option\u003e\n    \u003c?php endforeach; ?\u003e\n\u003c/select\u003e\n```\n\n### Plugin Uninstall Cleanup\n\n```php\n// Remove custom role\nRole::delete( 'shop_manager' );\n\n// Remove custom capabilities from all roles\nforeach ( Query::get_all_roles() as $role =\u003e $name ) {\n    Role::remove_capability( $role, 'manage_shop' );\n}\n```\n\n### Find Users for Notifications\n\n```php\n// Notify all administrators\n$admins = Query::get_users_with_capability( 'manage_options' );\nforeach ( $admins as $user_id ) {\n    wp_mail( /* send notification */ );\n}\n\n// Notify specific role\n$managers = Query::get_users_with_role( 'shop_manager' );\n```\n\n## Why This Library?\n\n- **Memorable API** - You'll remember these methods in 6 months\n- **No Bloat** - ~30 methods total, each one actually useful\n- **Clean Code** - Consistent naming, proper types, clear docblocks\n- **Real-World Focus** - Built for actual plugin development needs\n\n## License\n\nGPL-2.0-or-later\n\n## Support\n\n- [Documentation](https://github.com/arraypress/wp-user-access)\n- [Issue Tracker](https://github.com/arraypress/wp-user-access/issues)","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farraypress%2Fwp-user-access","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farraypress%2Fwp-user-access","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farraypress%2Fwp-user-access/lists"}