PHP code example of techieni3 / laravel-user-permissions
1. Go to this page and download the library: Download techieni3/laravel-user-permissions library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
techieni3 / laravel-user-permissions example snippets
namespace App\Enums;
enum Role: string
{
case Admin = 'admin';
case Editor = 'editor';
case User = 'user';
}
use App\Enums\Role;
// Assign a role
$user->addRole(Role::Admin);
// Assign permission directly
$user->addPermission('post.create');
// Check permissions
if ($user->hasPermission('post.create')) {
// User can create posts
}
// Check roles
if ($user->hasRole(Role::Admin)) {
// User is an admin
}
use Illuminate\Support\Facades\Gate;
public function boot(): void
{
Gate::define('viewPermissionsDashboard', function (User $user) {
return $user->hasRole('admin');
});
}
use App\Enums\Role;
// Add a single role
$user->addRole(Role::Admin);
// Add multiple roles
$user->syncRoles([Role::Admin, Role::Editor]);
// Remove a role
$user->removeRole(Role::Admin);
// Remove all roles and sync new ones
$user->syncRoles([Role::User]);
// Check a single role
if ($user->hasRole(Role::Admin)) {
// User is an admin
}
// Check any role
if ($user->hasAnyRole([Role::Admin, Role::Editor])) {
// User has at least one of these roles
}
// Check all roles
if ($user->hasAllRoles([Role::Admin, Role::Editor])) {
// User has both roles
}
// Get all admins
$admins = User::role(Role::Admin)->get();
// Get users with multiple roles
$editors = User::role([Role::Admin, Role::Editor])->get();
// Get users without a role
$nonAdmins = User::withoutRole(Role::Admin)->get();
// Add a single permission
$user->addPermission('post.create');
// Sync multiple permissions
$user->syncPermissions(['post.create', 'post.update', 'post.delete']);
// Remove a permission
$user->removePermission('post.create');
// Remove all permissions and sync new ones
$user->syncPermissions(['post.view']);
// Check single permission
if ($user->hasPermission('post.create')) {
// User can create posts
}
// Using alias
if ($user->hasPermissionTo('post.create')) {
// Same as hasPermission()
}
// Check any permission
if ($user->hasAnyPermission(['post.create', 'post.update'])) {
// User has at least one permission
}
// Check all permissions
if ($user->hasAllPermissions(['post.create', 'post.update'])) {
// User has all permissions
}
// Get users with permission
$creators = User::permission('post.create')->get();
// Get users with multiple permissions
$editors = User::permission(['post.create', 'post.update'])->get();
// Get users without permission
$viewers = User::withoutPermission('post.create')->get();
// Get all permissions (direct + role-based)
$allPermissions = $user->getPermissions();
// Get only direct permissions
$directPermissions = $user->directPermissions;
// Using Gate facade
if (Gate::allows('post.create')) {
// Current user can create posts
}
// Using User model
if ($user->can('post.create')) {
// User can create posts
}
// In Blade templates
@can('post.create')
<button>Create Post</button>
@endcan
// Require single permission
Route::get('/posts/create', CreatePost::class)
->middleware('permission:post.create');
// Require any of multiple permissions (OR)
Route::get('/posts', ViewPosts::class)
->middleware('permission:post.view|post.view_any');
// Require single role
Route::get('/admin', AdminDashboard::class)
->middleware('role:admin');
// Require any of multiple roles (OR)
Route::get('/dashboard', Dashboard::class)
->middleware('role:admin|editor');
// Require role OR permission
Route::get('/posts', ViewPosts::class)
->middleware('role.or.permission:admin|post.view');
namespace App\Enums;
enum ModelActions: string
{
case ViewAny = 'view_any';
case View = 'view';
case Create = 'create';
case Edit = 'update';
case Delete = 'delete';
case Restore = 'restore';
case ForceDelete = 'force_delete';
}
enum ModelActions: string
{
// ... existing cases
case Publish = 'publish';
case Archive = 'archive';
}
use Techieni3\LaravelUserPermissions\Traits\HasRoles;
use Techieni3\LaravelUserPermissions\Traits\CascadeDeletesRolesAndPermissions;
class User extends Authenticatable
{
use HasRoles, CascadeDeletesRolesAndPermissions;
}
// Load models first to trigger events
User::where('status', 'inactive')->get()->each->delete();
protected function schedule(Schedule $schedule)
{
// Run cleanup daily at 2 AM
$schedule->command('permissions:cleanup-orphans')->dailyAt('02:00');
// Or run weekly
$schedule->command('permissions:cleanup-orphans')->weekly();
}
use Techieni3\LaravelUserPermissions\Events\RoleAdded;
use Techieni3\LaravelUserPermissions\Events\RoleRemoved;
use Techieni3\LaravelUserPermissions\Events\RolesSynced;
use Techieni3\LaravelUserPermissions\Events\PermissionAdded;
use Techieni3\LaravelUserPermissions\Events\PermissionRemoved;
use Techieni3\LaravelUserPermissions\Events\PermissionsSynced;
// Listen to single role assignment
Event::listen(RoleAdded::class, function (RoleAdded $event) {
$user = $event->model;
$role = $event->role;
Log::info("Role {$role->name->value} added to user {$user->id}");
});
// Listen to bulk role sync
Event::listen(RolesSynced::class, function (RolesSynced $event) {
$user = $event->model;
Log::info("User {$user->id} roles synced", [
'added' => $event->attached->pluck('name.value'),
'removed' => $event->detached->pluck('name.value'),
'current' => $event->synced->pluck('name.value'),
]);
});
// Listen to permission changes
Event::listen(PermissionsSynced::class, function (PermissionsSynced $event) {
$user = $event->model;
Log::info("User {$user->id} permissions synced", [
'added' => $event->attached->pluck('name'),
'removed' => $event->detached->pluck('name'),
]);
});
// Listen to cascade deletion (
'models' => [
'tire directories
app_path('Models'),
app_path('Modules/Blog/Models'),
app_path('Modules/Shop/Models'),
// Include specific model classes
App\External\CustomModel::class,
App\ThirdParty\SpecialModel::class,
],
],