Enhanced admin panel

This commit is contained in:
Constantin Graf
2024-04-26 14:39:36 +02:00
committed by Constantin Graf
parent 42ad5e004a
commit 0bf8a25d64
15 changed files with 258 additions and 77 deletions

View File

@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace App\Actions\Fortify;
use App\Enums\Role;
use App\Enums\Weekday;
use App\Models\Organization;
use App\Models\User;
@@ -81,7 +82,7 @@ class CreateNewUser implements CreatesNewUsers
$organization->users()->attach(
$user, [
'role' => 'owner',
'role' => Role::Owner->value,
]
);

View File

@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace App\Actions\Jetstream;
use App\Enums\Role;
use App\Models\Organization;
use App\Models\User;
use Illuminate\Auth\Access\AuthorizationException;
@@ -42,7 +43,7 @@ class CreateOrganization implements CreatesTeams
$organization->users()->attach(
$user, [
'role' => 'owner',
'role' => Role::Owner->value,
]
);

View File

@@ -8,6 +8,7 @@ use App\Filament\Resources\UserResource\Pages;
use App\Filament\Resources\UserResource\RelationManagers\OrganizationsRelationManager;
use App\Filament\Resources\UserResource\RelationManagers\OwnedOrganizationsRelationManager;
use App\Models\User;
use Exception;
use Filament\Forms;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Form;
@@ -15,6 +16,7 @@ use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Tables\Table;
use Illuminate\Support\Facades\Hash;
use STS\FilamentImpersonate\Tables\Actions\Impersonate;
class UserResource extends Resource
{
@@ -70,6 +72,19 @@ class UserResource extends Resource
//
])
->actions([
Impersonate::make()->before(function (User $record): void {
if ($record->currentTeam === null) {
$organization = $record->organizations()->where('personal_team', '=', true)->first();
if ($organization === null) {
$organization = $record->organizations()->first();
}
if ($organization === null) {
throw new Exception('User has no organization');
}
$record->currentTeam()->associate($organization);
$record->save();
}
}),
Tables\Actions\EditAction::make(),
])
->bulkActions([

View File

@@ -7,6 +7,7 @@ namespace App\Filament\Resources\UserResource\Pages;
use App\Filament\Resources\UserResource;
use Filament\Actions;
use Filament\Resources\Pages\EditRecord;
use STS\FilamentImpersonate\Pages\Actions\Impersonate;
class EditUser extends EditRecord
{
@@ -15,6 +16,7 @@ class EditUser extends EditRecord
protected function getHeaderActions(): array
{
return [
Impersonate::make()->record($this->getRecord()),
Actions\DeleteAction::make(),
];
}

View File

@@ -126,6 +126,11 @@ class User extends Authenticatable implements FilamentUser, MustVerifyEmail
return in_array($this->email, config('auth.super_admins', []), true) && $this->hasVerifiedEmail();
}
public function canBeImpersonated(): bool
{
return $this->is_placeholder === false;
}
/**
* @return BelongsToMany<Organization>
*/

View File

@@ -59,10 +59,14 @@ class PermissionStore
?->membership
?->role;
if ($role === null) {
return [];
}
/** @var Role|null $roleObj */
$roleObj = Jetstream::findRole($role);
return $role !== null ? ($roleObj?->permissions ?? []) : [];
return $roleObj?->permissions ?? [];
}
/**