directorytree/authorization
Native role & permission management for Laravel. Install via Composer, run migrations, add the Authorizable trait to your User model, then check roles/permissions, use caching, gate registration, and middleware. Includes customizable migrations/models and tests.
Pros:
Gate, Policy, and can()/authorize() methods, reducing learning curve and ensuring consistency with existing Laravel ecosystems (e.g., Blade directives like @can).Authorizable, ManagesPermissions, and HasRoles allow for customization without forking the package.users.create) and role-based access control (RBAC), aligning with modern authorization patterns.RoleMiddleware and PermissionMiddleware for route-level protection, reducing boilerplate in controllers.Cons:
Gate/Policy system with added RBAC.User authorizable entities) require manual trait implementation.users.create vs. user.create) may cause ambiguity.PermissionRegistrar in setUp()).User, Role, or Permission models beyond the provided traits?Auth::user(), Gate, Policy) and Blade templates.can('edit', Post::class)).Gate policies, middleware).users.create vs. create_user).Authorizable on User).Gate::allows() vs. hasPermission()).Gate policies with package methods where applicable.php artisan vendor:publish --tag=authorization-migrations
(Customize migrations if needed, e.g., for legacy data formats.)PermissionRegistrar in setUp().Auth, Gate, Policy, and Middleware.can() in API routes).@can('search_users')).Gate policies with package methods.Team-based permissions).cacheExpiresIn.users.create vs. Users.Create).php artisan tinker to inspect user permissions:
$user = Auth::user();
$user->permissions; // Collection of Permission models
$user->roles; // Collection of Role models
cacheExpiresIn (e.g., now()->addMinutes(5)).use DirectoryTree\Authorization\Events\PermissionUpdated;
use Illuminate\Support\Facades\Cache;
PermissionUpdated::class => function () {
Cache::forget(config('authorization.cache_key'));
};
permissions.name, role_permission.role_id, and user_role.user_id are critical for large datasets.has_permission flags on users table) if queries are slow.queue facade to defer permission-heavy operations (e.g., bulk role assignments).| Failure Scenario | Impact | Mitigation |
|---|---|---|
| Cache corruption | Users lose permissions unexpectedly. | Use Redis with persistence; monitor cache size. |
| Database migration errors | Broken auth system. | Test migrations in staging; use rollback-safe changes. |
| Permission naming collisions | Ambiguous access control. | Enforce naming conventions ( |
How can I help you explore Laravel packages today?