Overview
Rest Generic Class provides two traits for permission management that integrate with spatie/laravel-permission:
- HasPermissionsController - HTTP endpoints for permission operations
- 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: