PHP code example of kodepik / ums-laravel

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

    

kodepik / ums-laravel example snippets


session('ums_token');         // JWT access token
session('ums_refresh_token'); // Refresh token  
session('ums_user');          // Decoded claims (array)

// routes/api.php
Route::middleware(['ums.auth'])->group(function () {
    Route::get('/profile', function () {
        return response()->json(ums_user()->toArray());
    });
});

Route::middleware(['ums.auth'])->group(function () {
    // Semua route di sini butuh token valid
});

// User harus punya permission 'read' di module 'inventory'
Route::middleware(['ums.auth', 'ums.permission:inventory,read'])->group(function () {
    Route::get('/items', [ItemController::class, 'index']);
});

// User harus punya permission 'write' di module 'inventory'
Route::middleware(['ums.auth', 'ums.permission:inventory,write'])->group(function () {
    Route::post('/items', [ItemController::class, 'store']);
});

// User harus punya role 'admin' di module 'dashboard'
Route::middleware(['ums.auth', 'ums.role:dashboard,admin'])->group(function () {
    Route::get('/admin', [AdminController::class, 'index']);
});

// User harus punya akses ke module 'reports'
Route::middleware(['ums.auth', 'ums.module:reports'])->group(function () {
    Route::get('/reports', [ReportController::class, 'index']);
});

// Harus login + punya module inventory + permission delete
Route::middleware(['ums.auth', 'ums.module:inventory', 'ums.permission:inventory,delete'])
    ->delete('/items/{id}', [ItemController::class, 'destroy']);

// Get current user (dari request attribute atau session)
$user = ums_user();              // UmsClaims|null

// Cek permission
ums_can('inventory', 'read');    // bool
ums_can('inventory', 'delete');  // bool

// Cek role
ums_has_role('dashboard', 'admin');    // bool
ums_has_role('dashboard', 'viewer');   // bool

// Cek module access
ums_has_module('inventory');      // bool
ums_has_module('reports');        // bool

// Get raw JWT token dari session
ums_token();                     // string|null

$user = ums_user();

// Properties
$user->userId;       // "d4c8546e-3166-4afe-a79f-70c073a7c1f7"
$user->email;        // "[email protected]"
$user->appId;        // "APP-10cd66bc"
$user->modules;      // array of module claims
$user->exp;          // 1782881536 (token expiry unix timestamp)
$user->iat;          // 1782877936 (token issued at)
$user->jti;          // "e2a4b879-ffd9-4a1a-9536-f0edcb1a9ebb"

// Methods
$user->hasPermission('inventory', 'read');     // bool
$user->hasRole('inventory', 'admin');          // bool
$user->hasModule('inventory');                 // bool
$user->getModuleRoles('inventory');            // ['admin', 'editor']
$user->getModulePermissions('inventory');      // ['read', 'write', 'delete']
$user->getModuleNames();                      // ['dashboard', 'inventory']
$user->isExpired();                           // bool
$user->toArray();                             // array

$user->modules = [
    [
        'module' => 'dashboard',
        'parent_module' => null,
        'roles' => ['admin'],
        'permissions' => ['create', 'delete', 'update', 'view'],
    ],
    [
        'module' => 'reports',
        'parent_module' => 'dashboard',
        'roles' => ['viewer'],
        'permissions' => ['read'],
    ],
];

use Kodepik\UMS\Facades\UMS;

// Validate token secara manual
$claims = UMS::validateToken($jwtToken);

// Validate via UMS server (server-side, lebih aman)
$claims = UMS::validateTokenRemote($jwtToken);

// Refresh token
$result = UMS::refreshToken($refreshToken);
// $result = ['token' => '...', 'refresh_token' => '...']

// Get URLs
$loginUrl = UMS::getLoginUrl();
$logoutUrl = UMS::getLogoutUrl('https://myapp.com/login');

// Clear JWKS cache (setelah key rotation di UMS)
UMS::invalidateJwksCache();

// routes/web.php
Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard');

// app/Http/Controllers/DashboardController.php


namespace App\Http\Controllers;

class DashboardController extends Controller
{
    public function index()
    {
        $user = ums_user();

        if (!$user) {
            return redirect()->route('ums.login');
        }

        return view('dashboard', compact('user'));
    }
}

// routes/api.php
use App\Http\Controllers\Api\ItemController;

Route::middleware(['ums.auth'])->group(function () {

    Route::get('/me', function () {
        return response()->json(['data' => ums_user()->toArray()]);
    });

    // CRUD dengan permission checks
    Route::middleware(['ums.permission:inventory,read'])
        ->get('/items', [ItemController::class, 'index']);

    Route::middleware(['ums.permission:inventory,create'])
        ->post('/items', [ItemController::class, 'store']);

    Route::middleware(['ums.permission:inventory,update'])
        ->put('/items/{id}', [ItemController::class, 'update']);

    Route::middleware(['ums.permission:inventory,delete'])
        ->delete('/items/{id}', [ItemController::class, 'destroy']);

    // Admin-only
    Route::middleware(['ums.role:inventory,admin'])
        ->post('/items/bulk-delete', [ItemController::class, 'bulkDelete']);
});



namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class ItemController extends Controller
{
    public function __construct()
    {
        $this->middleware('ums.auth');
        $this->middleware('ums.permission:inventory,read')->only(['index', 'show']);
        $this->middleware('ums.permission:inventory,create')->only(['store']);
        $this->middleware('ums.permission:inventory,update')->only(['update']);
        $this->middleware('ums.permission:inventory,delete')->only(['destroy']);
    }

    public function index()
    {
        $items = \App\Models\Item::all();
        return response()->json(['success' => true, 'data' => $items]);
    }

    public function store(Request $request)
    {
        $validated = $request->validate(['name' => '

// Tanpa middleware — cek manual di logic
public function exportReport()
{
    if (!ums_can('reports', 'export')) {
        abort(403, 'You do not have export permission');
    }

    // ... generate export
}

// Conditional content berdasarkan role
public function dashboard()
{
    $data = ['items' => Item::all()];

    if (ums_has_role('dashboard', 'admin')) {
        $data['admin_stats'] = $this->getAdminStats();
    }

    return view('dashboard', $data);
}

// routes/web.php
use Kodepik\UMS\Services\UmsClient;

Route::get('/auth/login', function (UmsClient $ums) {
    return redirect()->away($ums->getLoginUrl());
});

Route::get('/auth/callback', function (Request $request, UmsClient $ums) {
    $token = $request->query('token');
    $claims = $ums->validateToken($token);

    session([
        'ums_token' => $token,
        'ums_refresh_token' => $request->query('refresh_token'),
        'ums_user' => $claims->toArray(),
    ]);

    return redirect('/dashboard');
});

Route::get('/auth/logout', function (UmsClient $ums) {
    session()->flush();
    return redirect()->away($ums->getLogoutUrl(url('/login')));
});

use Kodepik\UMS\Facades\UMS;

$refreshToken = session('ums_refresh_token');
$result = UMS::refreshToken($refreshToken);

session([
    'ums_token' => $result['token'],
    'ums_refresh_token' => $result['refresh_token'],
]);
bash
php artisan vendor:publish --tag=ums-config
blade
{{-- resources/views/login.blade.php --}}
<a href="{{ route('ums.login') }}">Login with UMS SSO</a>
blade
{{-- resources/views/dashboard.blade.php --}}
<h1>Welcome, {{ ums_user()->email }}</h1>
<p>Your modules: {{ implode(', ', ums_user()->getModuleNames()) }}</p>

<a href="{{ route('ums.logout') }}">Logout</a>