PHP code example of libinkk / permission

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

    

libinkk / permission example snippets


$user->can('invoice.approve', $invoice);
$user->explain('invoice.approve', $invoice);

use Illuminate\Foundation\Auth\User as Authenticatable;
use Libinkk\Permission\Concerns\HasAuthorization;

class User extends Authenticatable
{
    use HasAuthorization;
}

use Libinkk\Permission\Permissions\Permission;
use Libinkk\Permission\Roles\Role;

Permission::crud('posts'); // posts.view / create / update / delete
Permission::define('posts.publish', ['group' => 'Posts']);

Role::findOrCreate('viewer')->givePermissionTo('posts.view');
Role::findOrCreate('editor')->givePermissionTo('posts.view', 'posts.create', 'posts.update');
Role::findOrCreate('admin')->givePermissionTo('posts.*');

$editor = User::find(1);
$editor->assignRole('editor');

$editor->can('posts.update'); // true
$editor->can('posts.delete'); // false
$editor->explain('posts.delete');
// ['allowed' => false, 'reason' => 'PERMISSION_MISSING', ...]

Route::post('/posts', [PostController::class, 'store'])
    ->middleware(['auth', 'permission:posts.create']);

Route::delete('/posts/{post}', [PostController::class, 'destroy'])
    ->middleware(['auth', 'permission:posts.delete']);

public function store(Request $request)
{
    $this->authorize('posts.create');

    Post::query()->create($request->validated());
}

use Libinkk\Permission\Conditions\Condition;
use Libinkk\Permission\Permissions\Permission;

Permission::define('invoice.approve', ['group' => 'Finance', 'is_dangerous' => true]);

Condition::define('within_approval_limit', function ($user, $invoice) {
    return (int) $invoice->amount <= (int) $user->approval_limit;
});

Permission::define('invoice.approve')->when('within_approval_limit');

$manager = User::find(10);
$manager->givePermissionTo('invoice.approve');
$manager->approval_limit = 50_000;
$manager->save();

$ok = Invoice::query()->create(['amount' => 20_000]);
$over = Invoice::query()->create(['amount' => 125_000]);

$manager->can('invoice.approve', $ok);   // true
$manager->can('invoice.approve', $over); // false — CONDITION_FAILED

$decision = $manager->authorizeFor('invoice.approve', $over);
$decision->reason;      // CONDITION_FAILED
$decision->conditions;  // ['within_approval_limit' => false]

$cover = User::find(11);

$delegation = $manager->delegate(
    'invoice.approve',
    to: $cover,
    until: now()->addHours(4),
    reason: 'On leave',
    resource: $ok, // optional: only this invoice
);

$cover->can('invoice.approve', $ok); // true until expiry or revoke
$manager->revokeDelegation($delegation);

// config/permission.php
'teams' => [
    'enabled' => true,
    '

use Libinkk\Permission\Authorization\AuthorizationContext;

$user->assignRole('editor', $orgA);
$user->assignRole('viewer', $orgB);

AuthorizationContext::tenant($orgA);
$user->can('posts.create'); // editor in A

AuthorizationContext::switch($orgB);
$user->can('posts.create'); // isolated — viewer in B

use Libinkk\Permission\Scopes\Scope;

$orgScope = Scope::for($organization, 'organization');
$wsScope = Scope::for($workspace, 'workspace', $orgScope);

AuthorizationContext::scope($workspace);

public function handle($request, Closure $next)
{
    if ($tenant = $request->route('organization')) {
        AuthorizationContext::tenant($tenant);
    }

    return $next($request);
}

Permission::defineResource('posts', ['view', 'create', 'update', 'delete', 'publish'], [
    'group' => 'Posts',
]);

Permission::crud('invoices'); // view/create/update/delete

Permission::inGroup('Posts');

$role = Role::findOrCreate('admin');
$role->givePermissionTo('posts.create', 'posts.delete');
$role->revokePermissionTo('posts.delete');
$role->syncPermissions(['posts.view', 'posts.create']);
$role->hasPermissionTo('posts.view');

$user->assignRole('editor');
$user->removeRole('editor');
$user->syncRoles('editor', 'author');
$user->hasRole('editor');
$user->hasAnyRole('editor', 'admin');
$user->hasAllRoles('editor', 'author');

$user->givePermissionTo('reports.export');
$user->revokePermissionTo('reports.export');
$user->getRoleNames();
$user->getPermissionNames();

$export = $user->exportAccess();
$export['totals'];
$export['effective_permissions'];

$role->givePermissionTo('posts.*');
$user->can('posts.view');   // true
$user->can('posts.delete'); // true

$user->givePermissionTo('posts.view.*');
$user->can('posts.view.own'); // true

Role::inherit('admin', 'manager');   // admin inherits manager
Role::inherit('manager', 'editor');
Role::uninherit('admin', 'manager');

$user->denyPermissionTo('posts.delete'); // beats role allow
$role->denyPermissionTo('posts.publish');

Permission::define('posts.update.own')
    ->when(fn ($user, $post) => $post->author_id === $user->id);

$user->can('posts.update.own', $post);

Role::findOrCreate('editor', 'api');
Permission::findOrCreate('posts.view', 'api');

$user->givePermissionTo('reports.export', expiresAt: now()->addDays(7));
$user->givePermissionTo('reports.export', startsAt: now()->addDay(), expiresAt: now()->addWeek());
$user->assignRole('contractor', expiresAt: now()->addHours(4));

'audit' => [
    'enabled' => true,
    'decisions' => false, // every can() — leave off in production
],

$permission->history();
$permission->rollbackTo(1);

Route::middleware('permission:posts.create')->group(...);
Route::middleware('permission:posts.create|posts.update')->group(...);
Route::middleware('role:admin|editor')->group(...);

'middleware' => [
    'permission_logic' => 'or', // or 'and'
    'role_logic' => 'or',
],

permission_payload(); // current user — UI only

use Libinkk\Permission\Filament\AuthorizesFilamentResource;
use Libinkk\Permission\Filament\FilamentAuthorization;

class PostResource extends Resource
{
    use AuthorizesFilamentResource;

    protected static ?string $permissionResource = 'posts';
}

Action::make('approve')->visible(FilamentAuthorization::visible('invoice.approve'));
BulkAction::make('delete')->authorize(FilamentAuthorization::bulkCallback('posts.delete'));

$panel->middleware(\Libinkk\Permission\Filament\PermissionFilamentPlugin::middleware());

use Libinkk\Permission\Attributes\Permission;

class PostController
{
    #[Permission('posts.publish', description: 'Publish posts', group: 'Posts')]
    public function publish() {}
}

$report = $user->debugAuthorization('invoice.approve', $invoice);
$report['final'];  // ALLOWED | DENIED
$report['text'];
$report['checks'];

$user->preloadAuthorization();
$user->permissionsFor('posts');
// ['view' => true, 'create' => true, 'update' => false, ...]

$decisions = $user->authorizeMany('posts.update', $posts);

use Libinkk\Permission\Permissions\Permission;
use Libinkk\Permission\Testing\InteractsWithAuthorization;

Permission::fake();
Permission::allow('posts.create');
Permission::deny('posts.delete');

$this->assertCan($user, 'posts.update');
$this->assertCannot($user, 'posts.delete', $post);

return [
    'enabled' => true,
    'default_guard' => 'web',
    'database' => [
        'primary_key' => 'bigint', // bigint | uuid | ulid
        'user_key' => 'bigint',
    ],
    'cache' => [
        'enabled' => true,
        'prefix' => 'libinkk:permission:v1',
        'redis' => ['enabled' => false, 'store' => 'redis'],
        'decision_cache' => ['enabled' => true],
    ],
    'teams' => ['enabled' => false, '
bash
php artisan vendor:publish --tag=libinkk-permission-config
php artisan migrate
bash
php artisan permission:doctor
bash
php artisan permission:resource posts --actions=view,create,update,delete,publish --group=Posts
bash
php artisan permission:explain 10 invoice.approve
bash
php artisan permission:export 42 --type=App\\Models\\User --format=table
bash
php artisan vendor:publish --tag=libinkk-permission-frontend
jsx
import { PermissionProvider, usePermission, Can, CanAny, CanAll } from '@/js/vendor/libinkk-permission/react';

<PermissionProvider value={window.__LIBINKK_PERMISSION__}>
    <Can permission="posts.create"><CreatePostButton /></Can>
    <CanAny permissions={['posts.create', 'posts.update']}><PostActions /></CanAny>
    <CanAll permissions={['posts.view', 'posts.create']}><AdvancedEditor /></CanAll>
</PermissionProvider>
bash
php artisan permission:discover --path=app/Http/Controllers
php artisan permission:sync
php artisan permission:sync --dry-run
bash
php artisan permission:install
php artisan permission:resource posts
php artisan permission:discover
php artisan permission:sync
php artisan permission:validate
php artisan permission:doctor
php artisan permission:graph --json
php artisan permission:unused
php artisan permission:explain {userId} invoice.approve
php artisan permission:cache
php artisan permission:cache:clear
php artisan permission:export {userId}
bash
php artisan permission:doctor --json
php artisan permission:validate
php artisan permission:explain {id} posts.delete --json