Skip to main content

Overview

Rest Generic Class provides two traits for permission management that integrate with spatie/laravel-permission:
  1. HasPermissionsController - HTTP endpoints for permission operations
  2. HasPermissionsService - Business logic for permission assignment and retrieval
These traits provide:
  • Assign permissions to roles or users (ADD/SYNC/REVOKE modes)
  • Retrieve permissions by role or user
  • Auto-generate permissions from routes
  • Filter permissions by module, entity, or prefix
  • Aggregate permissions across roles/users
  • Support for pivot attributes on user permissions
Namespace: Ronu\RestGenericClass\Core\Traits Location:
  • /src/Core/Traits/HasPermissionsController.php:11
  • /src/Core/Traits/HasPermissionsService.php:21

HasPermissionsController

Provides HTTP endpoints for permission management.

Usage

Methods

modules

Retrieve list of application modules.
Query Parameters:
  • enabled (bool|null) - Filter by enabled status (true/false/null for all)
Example:
Response:
--site-- is a special module representing routes without a specific module.

assign_roles

Assign permissions to roles.
Request Body:
Parameters:
  • roles (array|string) - Role names or IDs (comma-separated or array)
  • guard (string) - Guard name (default: 'api')
  • mode (string) - Operation mode: 'ADD', 'SYNC', or 'REVOKE'
  • dry_run (bool) - Preview changes without persisting (default: false)
  • no_create (bool) - Don’t create missing permissions (default: false)
  • perms (array) - Explicit permission names
  • prefix (string) - Filter permissions by prefix (e.g., 'users.')
  • from (string) - Load permissions from JSON/YAML file
  • modules (array) - Filter by module names
  • entities (array) - Filter by entity names (format: 'entity' or 'module.entity')
  • by (string) - Identify roles by 'name' or 'id' (default: 'name')
Response:
Example:

assign_users

Assign permissions to users.
Request Body:
Parameters: Same as assign_roles, plus:
  • users (array|string) - User identifiers (IDs, emails, or names)
  • by (string) - Identify users by 'id', 'email', or 'name' (default: 'id')
  • pivot (object) - Additional pivot attributes for model_has_permissions table
Response:
Example with Pivot:

HasPermissionsService

Provides business logic for permission operations.

Usage

Methods

assignPermissionToRoles

Assign permissions to roles with ADD/SYNC/REVOKE modes.
Parameters:
  • array $roleInputs - Role names or IDs
  • array $options - Configuration array:
    • guard (string) - Guard name
    • mode (string) - 'ADD', 'SYNC', or 'REVOKE'
    • dry_run (bool) - Preview only
    • perms (array) - Permission names
    • prefix (string) - Permission prefix filter
    • from (string) - JSON/YAML file path
    • modules (array) - Module filter
    • entities (array) - Entity filter
    • by (string) - Identify roles by 'name' or 'id'
Returns:
Example:

assignPermissionToUsers

Assign permissions to users.
Parameters: Same as assignPermissionToRoles, plus:
  • pivot (array) - Pivot attributes for model_has_permissions
Example:

getPermissionsByRoles

Retrieve permissions for given roles.
Example:
Response:

getPermissionsByUsers

Retrieve permissions for given users.
Example:
Response:

aggregate

Aggregate permissions across roles/users.
Parameters:
  • array $lists - Array of permission lists from getPermissionsByRoles or getPermissionsByUsers
  • string $mode - 'union' (all unique permissions) or 'intersection' (common permissions)
Example:

refreshPermissions

Auto-generate permissions from application routes.
Parameters:
  • string $guard - Guard name
  • bool $dry - Dry run (don’t persist changes)
Returns: Array of detected permissions:
Example:

Operation Modes

ADD Mode

Adds permissions without removing existing ones.
Behavior:
  • Adds specified permissions
  • Keeps existing permissions intact
  • Equivalent to givePermissionTo()

SYNC Mode

Replaces all permissions with specified set.
Behavior:
  • Removes all existing permissions
  • Adds specified permissions
  • Equivalent to syncPermissions()

REVOKE Mode

Removes specified permissions.
Behavior:
  • Removes specified permissions
  • Keeps other permissions intact
  • Equivalent to revokePermissionTo()

Permission Filtering

By Module

Loads all permissions where module column matches.

By Entity

Loads permissions where model column matches (case-insensitive). With module prefix:
Filters by both module='mod_sales' AND model='orders'.

By Prefix

Loads permissions where name starts with users. (e.g., users.read, users.create).

From File

Loads permission names from JSON/YAML file:

Pivot Attributes (User Permissions)

Add custom pivot columns to model_has_permissions:
Assign with pivot data:

Error Handling

Roles Not Found

Users Not Found

Invalid Mode

Invalid Column

Configuration

Configure Spatie permission package in config/permission.php: