PHP code example of shakil3334413 / laravel-role-permissions

1. Go to this page and download the library: Download shakil3334413/laravel-role-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/ */

    

shakil3334413 / laravel-role-permissions example snippets


use Illuminate\Foundation\Auth\User as Authenticatable;
use Shakil\Permissions\Concerns\HasRoles;
use Shakil\Permissions\Contracts\HasPermissions;

class User extends Authenticatable implements HasPermissions
{
    use HasRoles;

    // Keep your existing traits, attributes, and methods.
}

use Shakil\Permissions\Models\Module;
use Shakil\Permissions\Models\Permission;

$dashboard = Module::firstOrCreate(
    ['slug' => 'dashboard'],
    ['name' => 'Dashboard'],
);

Permission::firstOrCreate(
    ['scope' => 'web', 'slug' => 'dashboard.view'],
    ['name' => 'View dashboard', 'module_id' => $dashboard->id],
);

$sales = Module::firstOrCreate(['slug' => 'sales'], ['name' => 'Sales']);

$orders = $sales->submodules()->firstOrCreate(
    ['slug' => 'orders'],
    ['name' => 'Orders'],
);

foreach (['web', 'app'] as $scope) {
    // The relation sets both module_id and submodule_id.
    $orders->permissions()->firstOrCreate(
        ['scope' => $scope, 'slug' => 'orders.view'],
        ['name' => 'View orders'],
    );
}

$modules = Module::with([
    'directPermissions',
    'submodules.permissions',
])->get();

$sales->permissions;       // All permissions under Sales.
$sales->directPermissions; // Only permissions without a submodule.
$orders->permissions;      // Only permissions in Orders.

use Shakil\Permissions\Models\Role;

$webEditor = Role::firstOrCreate(
    ['scope' => 'web', 'slug' => 'editor'],
    ['name' => 'Web Editor'],
);
$appViewer = Role::firstOrCreate(
    ['scope' => 'app', 'slug' => 'viewer'],
    ['name' => 'App Viewer'],
);

$webEditor->givePermissionTo('orders.view');
$appViewer->givePermissionTo('orders.view');

// $user is an existing user selected by trusted administration code.

// Replace every web role with exactly one role; app roles are preserved.
$user->setRole('editor', 'web');

// Add one app role.
$user->assignRole('viewer', 'app');

// After creating the manager role in the web scope, add several web roles.
$user->assignRoles(['editor', 'manager'], 'web');

// Replace web assignments with this exact set.
$user->syncRoles(['editor', 'manager'], 'web');

// Clear web roles while preserving app roles.
$user->syncRoles([], 'web');

// Remove a specific app assignment.
$user->removeRole('viewer', 'app');

'role_mode' => 'single',

// routes/web.php
Route::get('/orders', [OrderController::class, 'index'])
    ->middleware(['auth', 'can:permission:web:orders.view']);

// routes/api.php — if your application uses Sanctum.
Route::get('/orders', [ApiOrderController::class, 'index'])
    ->middleware(['auth:sanctum', 'can:permission:app:orders.view']);

$user->hasPermissionTo('orders.view', 'web');
$user->hasPermissionTo('orders.view', 'app');
$user->hasRole('editor', 'web');

$user->can('permission:web:orders.view');
Gate::authorize('permission:app:orders.view');

$webEditor->revokePermissionTo('orders.view');
$webEditor->update(['is_active' => false]);
$user->removeRole('editor', 'web');

return [
    'gate_prefix' => 'permission:',
    'scopes' => ['web', 'app'],
    'role_mode' => 'multiple',
];
bash
composer vendor:publish --tag=permissions-migrations
php artisan vendor:publish --tag=permissions-config
php artisan migrate