NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Packagist · #222 most downloaded on Packagist
Permission handling for Laravel 12 and up
Last release 3 months ago
03 Jul 2026
Ships fairly regularly
a new release about every 4 weeks
Nearly every release is documented
notes for 59 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
11 years old
224 releases · first in 2015
Avoid calling the config helper in the role/perm model constructor by @adiafora in https://github.com/spatie/laravel-permission/pull/2098 as discussed
DIFull Changelog: https://github.com/spatie/laravel-permission/compare/5.5.9...5.5.10
Prevent MissingAttributeException for guard_name by @ejunker in https://github.com/spatie/laravel-permission/pull/2216
Compatibility Bugfix
MissingAttributeException for guard_name by @ejunker in https://github.com/spatie/laravel-permission/pull/2216Full Changelog: https://github.com/spatie/laravel-permission/compare/5.5.8...5.5.9
One column per quarter.
Fix returning all roles instead of the assigned by @erikn69 in https://github.com/spatie/laravel-permission/pull/2194
HasRoles trait
Full Changelog: https://github.com/spatie/laravel-permission/compare/5.5.7...5.5.8
Delegate permission collection filter to another method by @angeljqv in https://github.com/spatie/laravel-permission/pull/2182
Optimize HasPermissions trait
Full Changelog: https://github.com/spatie/laravel-permission/compare/5.5.6...5.5.7
Actions: add PHP 8.2 Build by @erikn69 in https://github.com/spatie/laravel-permission/pull/2214
Just a maintenance release.
Full Changelog: https://github.com/spatie/laravel-permission/compare/5.5.5...5.5.6
[PHP 8.2] Fix ${var} string interpolation deprecation by @Ayesh in https://github.com/spatie/laravel-permission/pull/2117
${var} string interpolation deprecation by @Ayesh in https://github.com/spatie/laravel-permission/pull/2117getKey, getKeyName instead of id by @erikn69 in https://github.com/spatie/laravel-permission/pull/2116Full Changelog: https://github.com/spatie/laravel-permission/compare/5.5.4...5.5.5
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
- add support for Laravel 9
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Fix hints, support int on scopePermission
Option for custom logic for checking permissions
[V5] Fix detaching on all teams instead of only current #1888 by @erikn69 in https://github.com/spatie/laravel-permission/pull/1890
Super Admin on teams by @erikn69 in https://github.com/spatie/laravel-permission/pull/1845Avoid Roles over-hydration #1834
No longer flush cache on User role/perm assignment changes #1832
Change default-guard-lookup to prefer current user's guard (see BC note in #1817 )
role_id,permission_id #1823Nothing published for this version
Nothing published for this version
Avoid Roles over-hydration #1834
Avoid BC break (removed interface change) on cache change added in 4.3.0 #1826
Speed up permissions cache lookups, and make cache smaller #1799
- Add hasExactRoles method #1696
Refactor to resolve guard only once during middleware
Added note in migration for field lengths on MySQL 8. (either shorten the columns to 125 or use InnoDB)
Drop support on Laravel 5.8 #1615
This package now requires PHP 7.2.5 and Laravel 6.0 or higher. If you are on a PHP version below 7.2.5 or a Laravel version below 6.0 you can use an older version of this package.
- Allow PHP 8.0
Optional $guard parameter may be passed to RoleMiddleware, PermissionMiddleware, and RoleOrPermissionMiddleware. See #1565
$guard parameter may be passed to RoleMiddleware, PermissionMiddleware, and RoleOrPermissionMiddleware. See #1565- Added Laravel 8 support
Change users relationship type to BelongsToMany
users relationship type to BelongsToManyDeclare table relations earlier to improve guarded/fillable detection accuracy (relates to Aug 2020 Laravel security patch)
Provide migration error text to stop caching local config when installing packages.
Add missing config setting for display_role_in_exception
display_role_in_exceptionpermission:show command uses configured modelsAllow guardName() as a function with priority over $guard_name property #1395
Update patch to handle intermittent error in #1370
Ugly patch to handle intermittent error: Trying to access array offset on value of type null in #1370
Trying to access array offset on value of type null in #1370Add Wildcard Permissions feature #1381 (see PR or docs for details)
Clear in-memory permissions on boot, for benefit of long running processes like Swoole. #1378
Refine test for Lumen dependency. Ref #1371, Fixes #1372.
Internal refactoring of scopes to use whereIn instead of orWhere #1334, #1335
Added methods to check any/all when querying direct permissions #1245
Allow splat operator for passing roles to hasAnyRole()
hasAnyRole()Added missing guardName to Exception PermissionDoesNotExist #1316
guardName to Exception PermissionDoesNotExist #1316- Fix 3.4.0 for Lumen
Make compatible with Swoole - ie: for long-running Laravel instances
Expose Artisan commands to app layer, not just to console
Remove duplicate and unreachable code
Implementation of optional guard check for hasRoles and hasAllRoles - See #1236
Use bigIncrements/bigInteger in migration - See #1224
Allow support for multiple role/permission models
Added permission:show CLI command to display a table of roles/permissions
permission:show CLI command to display a table of roles/permissionsremoveRole now returns the model, consistent with other methods$guarded properties updated to protectedreverts the changes made in 2.36.0 due to some reported breaks.
improve performance by reducing another iteration in processing query results and returning earlier
deprecated hasUncachedPermissionTo() (use hasPermissionTo() instead)
Add explicit pivotKeys to roles/permissions BelongsToMany relationships
- Laravel 5.8 compatibility
Your coding agent can read these notes before it upgrades. Set up the MCP server →