nyoncode/laravel-permission-extended
Installation:
composer require nyoncode/laravel-permission-extended
Publish the config (optional, but recommended for customization):
php artisan vendor:publish --provider="NyonCode\LaravelPermissionExtended\PermissionExtendedServiceProvider"
First Use Case:
$user->hasPermissionTo('admin.*'); // Checks for 'admin.create', 'admin.edit', etc.
super-admin) and use the @can directive:
@can('anything')
<!-- Super-admin sees this -->
@endcan
Blade Directives:
config/permission-extended.php:
'blade' => [
'enable' => true,
],
@canwildcard for wildcard checks:
@canwildcard('admin.*')
<!-- User has any admin permission -->
@endcanwildcard
Role-Permission Hierarchy:
admin.* to the admin role) to grant bulk access.hasRoleOrPermission for flexible checks:
$user->hasRoleOrPermission('editor|admin.*'); // Checks for 'editor' role OR any 'admin.*' permission.
Livewire Integration:
PermissionExtendedServiceProvider:
// In Livewire component
public function mount()
{
$this->authorizePermission('admin.*'); // Checks wildcard permissions.
}
Middleware Auto-Registration:
config/permission-extended.php:
'middleware' => [
'admin' => ['admin.*'],
'editor' => ['editor.*'],
],
Route::middleware(['permission:admin'])->group(function () {
// Admin-only routes
});
Dynamic Permission Checks:
Permission::wildcard() to manually check wildcards:
if (Permission::wildcard()->userHasPermission($user, 'admin.*')) {
// Grant access
}
Wildcard Caching:
Cache::remember("user_{$user->id}_permissions", now()->addHours(1), function () use ($user) {
return $user->hasPermissionTo('admin.*');
});
Super-Admin Overrides:
super-admin role is explicitly assigned to users who should bypass all checks. The package does not auto-detect this role—configure it in your User model or migration:
$user->assignRole('super-admin');
Blade Directive Conflicts:
@canwildcard conflicts with other packages, disable the directive in config/permission-extended.php and use manual checks:
'blade' => [
'enable' => false,
],
Livewire Permission Sync:
created() or boot() if the user isn’t loaded yet.Permission Denied Errors:
dd($user->getAllPermissions()->pluck('name')) to inspect a user’s permissions.admin.create vs. admin.*).Middleware Not Triggering:
app/Http/Kernel.php:
'permission' => \NyonCode\LaravelPermissionExtended\Middleware\PermissionMiddleware::class,
Custom Wildcard Logic:
app/Providers/PermissionExtendedServiceProvider.php:
public function boot()
{
Permission::wildcard(function ($permission) {
// Custom logic for wildcard matching
return str_contains($permission, '*.');
});
}
Extending Blade Directives:
php artisan vendor:publish --tag=permission-extended-views
resources/views/vendor/permission-extended/canwildcard.blade.php.Role-Based Wildcards:
trait RoleWildcardPermissions
{
public function hasRoleWildcardPermission(string $wildcard)
{
return $this->roles()->whereHas('permissions', function ($query) use ($wildcard) {
$query->where('name', 'like', $wildcard);
})->exists();
}
}
How can I help you explore Laravel packages today?