Installation:
composer require ilbeygi/userpermission:"dev-master"
dev-master only if actively maintained; prefer a stable version if available.Register Provider:
Add to config/app.php:
'providers' => [
Ilbeygi\UserPermission\UserPermissionServiceProvider::class,
],
Publish Config & Migrate:
php artisan vendor:publish --tag=userPermissionPackage_ilbeygi_ir
php artisan migrate
Add Middleware:
Register in app/Http/Kernel.php:
'routeMiddleware' => [
'checkRoles' => \Ilbeygi\UserPermission\Middlewares\CheckRole::class,
],
Seed Routes (One-Time):
/saveAllRouteNameInDatabase (requires login).vendor/ilbeygi/userpermission/src/route.php afterward.Access Panel:
Navigate to /panel/permissions to manage roles/permissions.
Assign a role to a user and restrict access:
// Assign 'admin' role to a user
$user->assignRole('admin');
// Protect a route
Route::get('/admin/dashboard', function () {
return view('admin.dashboard');
})->middleware('checkRoles:admin');
Assign Roles to Users:
// Single role
$user->assignRole('editor');
// Multiple roles
$user->assignRole(['editor', 'moderator']);
Check Role Permissions:
// Check if user has role
if ($user->hasRole('admin')) {
// Grant access
}
// Check if user has any of multiple roles
if ($user->hasAnyRole(['admin', 'editor'])) {
// Grant access
}
Dynamic Role-Based Middleware:
// In routes
Route::get('/profile', function () {
return view('profile');
})->middleware('checkRoles:user,editor');
// Or in controller constructor
public function __construct() {
$this->middleware('checkRoles:admin')->only(['destroy']);
}
Define Custom Permissions:
Extend the package by adding permissions to the permissions table:
DB::table('permissions')->insert([
['name' => 'delete_posts', 'description' => 'Delete user posts'],
['name' => 'manage_users', 'description' => 'CRUD users'],
]);
Assign Permissions to Roles:
Use the /panel/permissions UI or manually:
$role = Role::findByName('admin');
$role->attachPermission('delete_posts');
Gate Integration:
Gate::define('delete-post', function ($user) {
return $user->hasPermission('delete_posts');
});
/panel/permissions UI for non-developers to manage roles/permissions.Route::middleware('api', 'checkRoles:admin')->group(function () {
Route::get('/api/admin', function () { ... });
});
DatabaseSeeder:
$roles = ['admin', 'editor', 'user'];
foreach ($roles as $role) {
Role::create(['name' => $role]);
}
Route Caching:
/saveAllRouteNameInDatabase to update the database.vendor/ is permanent; ensure you’ve backed up custom routes.Middleware Misconfiguration:
checkRoles in Kernel.php will silently fail.$routeMiddleware.Permission Overrides:
permissions table won’t auto-sync with the UI.Role Hierarchy:
admin > editor).if ($user->hasRole('admin') || ($user->hasRole('editor') && $request->isMethod('get'))) {
// Allow
}
Check Route Permissions: Run:
php artisan route:list
route_permissions table.Log Middleware Errors:
Add to app/Exceptions/Handler.php:
report(function (CheckRoleException $e) {
Log::error('Role check failed: ' . $e->getMessage());
});
UI Panel Issues:
php artisan view:clear
php artisan cache:clear
Custom Role Models:
Extend the Role model:
class CustomRole extends \Ilbeygi\UserPermission\Models\Role
{
public function customMethod() { ... }
}
UserPermissionServiceProvider:
$this->app->bind(\Ilbeygi\UserPermission\Models\Role::class, CustomRole::class);
Override Permission Logic: Publish and modify the config:
php artisan vendor:publish --tag=userPermissionPackage_ilbeygi_ir --force
config/userpermission.php to change default behaviors (e.g., permission caching).Add Custom Fields: Extend migrations:
Schema::table('roles', function (Blueprint $table) {
$table->string('custom_field')->nullable();
});
Role model and panel views accordingly.Cache Role Checks:
Add to User model:
public function getRolesAttribute()
{
return cache()->remember("user.roles.{$this->id}", now()->addHours(1), function () {
return $this->roles->pluck('name');
});
}
Eager Load Roles: Avoid N+1 queries:
$users = User::with('roles')->get();
Batch Assign Roles: For bulk operations:
$users->each(function ($user) {
$user->assignRole('user');
});
DB::transaction(function () use ($users) {
$users->each(...);
});
How can I help you explore Laravel packages today?