Drupal is a registered trademark of Dries Buytaert

epm

No security coverage
View on drupal.org

Stop clicking through hundreds of checkboxes. Enhanced Permission Manager lets you create reusable permission presets, apply them to roles instantly, and manage permissions through Drush — saving hours of tedious admin work on every Drupal site you build.

In Drupal, configuring role permissions means navigating a massive table of checkboxes — often hundreds of them — and clicking each one individually. If you manage multiple roles, multiple environments, or multiple sites, you repeat this process over and over. EPM solves this by introducing permission presets: named, reusable sets of permissions that can be applied to any role with one click or a single Drush command.

Features

  • Permission Presets — Create named, reusable sets of permissions stored as config entities. Presets export with drush cex, live in your config sync directory, and are fully tracked in version control.
  • Capture from Existing Roles — Snapshot any role's current permissions into a preset with one click or drush epm:capture-preset. The fastest way to create a baseline.
  • Apply to Roles — Apply any preset to one or more roles simultaneously. Choose Merge (add on top of existing permissions) or Replace (wipe and reset to only the preset's permissions).
  • Permission Diff — Compare a preset against a role to see exactly what's different: what's only in the preset, only in the role, and what they share. Available via drush epm:diff.
  • Duplicate Presets — Clone any preset as a starting point for variations. Create a "Content Editor" preset, duplicate it, add a few permissions, and you have "Senior Editor" without rebuilding from scratch.
  • Filterable Permission UI — The preset form groups permissions by module with a live search filter. Type "media" to instantly see only media-related permissions. No more scrolling through massive tables.
  • Full Drush Integration — Every operation works from the command line:
    • drush epm:list-presets — List all saved presets
    • drush epm:show-preset [id] — Display all permissions in a preset
    • drush epm:apply-preset [preset] [role] — Apply a preset to a role (--reset to replace)
    • drush epm:capture-preset [id] [role] — Capture a role's permissions into a preset
    • drush epm:diff [preset] [role] — Compare preset vs role permissions
  • Config Entity Architecture — Presets work with standard config management, Config Split, git, and can be shared across sites as YAML files.

Planned Features

  • Permission audit log — Track when presets are applied, by whom, and to which roles
  • Preset inheritance — Build presets that extend other presets (e.g., "Editor" inherits from "Viewer")
  • Role comparison matrix — Side-by-side view of multiple roles showing permission overlap and differences
  • Bulk operations — Apply a preset to all roles matching a pattern, or revoke a specific permission across all roles
  • Permission recommendations — Flag risky permission combinations and suggest best practices
  • Standalone import/export — Share presets as YAML files independent of config sync
  • Scheduled application — Apply permission changes at a future date/time
  • Permission snapshots — Save the state of all role permissions at a point in time for rollback

Post-Installation

  1. Enable the module: drush en enhanced_permission_manager
  2. Navigate to Administration → People → Permission Presets (/admin/people/permission-presets)
  3. Click Add permission preset to create your first preset manually, or use the Capture from role dropdown to snapshot an existing role's permissions
  4. Use the filterable permission checkboxes to select the permissions you want in the preset
  5. Once saved, use the Apply to role operation from the preset list to assign it to any role
  6. Grant the "Administer permission presets" permission to any role that should manage presets (administrators have it by default)

The module adds a Permission Presets tab under the People administration section. Presets appear in your config sync directory as enhanced_permission_manager.preset.*.yml files.

Additional Requirements

No contributed modules are required. EPM depends only on Drupal core's User module.

  • Drupal 10.3+ or Drupal 11
  • Drush 12+ (optional — required only for CLI commands; the admin UI works without Drush)
  • Config Split — Create environment-specific presets (e.g., a "Developer" preset that only exists in dev environments)
  • Role Delegation — Pairs well with EPM for managing which users can assign roles that have preset-managed permissions
  • Permissions by Term — For content-level access control that complements role-based permissions managed by EPM

Similar projects

  • Core Permissions UI (/admin/people/permissions) — The built-in permissions page requires clicking individual checkboxes one at a time across a massive table. EPM replaces this workflow with reusable presets, bulk application, and CLI tools.
  • Role Export — Exports roles with machine names but doesn't provide preset/template functionality or the ability to apply permission sets across multiple roles.
  • Permissions by Entity — Focuses on entity-level access control rather than role permission management. Solves a different problem.

EPM is specifically designed to solve the "clicking 200 checkboxes" problem that every Drupal site builder encounters when setting up roles. Rather than replacing the core permissions system, it provides a management layer on top of it.

Supporting this Module

This module is maintained by August Ash. If you find it useful, consider:

  • Submitting bug reports and feature requests in the issue queue
  • Contributing patches and documentation improvements
  • Sharing your use cases to help guide development priorities

Community Documentation

Documentation and walkthrough videos coming soon. If you create content about EPM, let us know in the issue queue and we'll link it here.

Activity

Total releases
1
First release
Feb 2026
Latest release
1 week ago
Release cadence
Stability
100% stable

Releases

Version Type Release date
1.0.0 Stable Feb 19, 2026