Send permission to client via inertia data

This commit is contained in:
Constantin Graf
2024-04-24 13:40:57 +02:00
committed by Constantin Graf
parent a3196c4964
commit af447ce2c0
2 changed files with 32 additions and 0 deletions

View File

@@ -6,6 +6,7 @@ namespace App\Http\Middleware;
use App\Models\Organization;
use App\Models\User;
use App\Service\PermissionStore;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Gate;
@@ -23,7 +24,9 @@ class ShareInertiaData
*/
public function handle(Request $request, Closure $next): Response
{
$permissions = app(PermissionStore::class);
Inertia::share(array_filter([
'permissions' => $request->user() !== null ? $permissions->permissions($request->user()->currentTeam) : [],
'jetstream' => function () use ($request) {
/** @var User|null $user */
$user = $request->user();

View File

@@ -7,6 +7,8 @@ namespace App\Service;
use App\Models\Organization;
use App\Models\User;
use Illuminate\Support\Facades\Auth;
use Laravel\Jetstream\Jetstream;
use Laravel\Jetstream\Role;
class PermissionStore
{
@@ -40,4 +42,31 @@ class PermissionStore
return in_array($permission, $permissions, true);
}
/**
* @return array<string>
*/
public function getPermissions(Organization $organization): array
{
/** @var User|null $user */
$user = Auth::user();
if ($user === null) {
return [];
}
if (! $user->belongsToTeam($organization)) {
return [];
}
$role = $organization->users
->where('id', $user->getKey())
->first()
?->membership
?->role;
/** @var Role|null $roleObj */
$roleObj = Jetstream::findRole($role);
return $role !== null ? ($roleObj?->permissions ?? []) : [];
}
}