UserResource.php 2.7KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. <?php
  2. namespace App\Filament\Resources;
  3. use App\Filament\Resources\UserResource\Pages;
  4. use App\Models\User;
  5. use Filament\Forms\Components\Select;
  6. use Filament\Forms\Components\TextInput;
  7. use Filament\Forms\Form;
  8. use Filament\Resources\Resource;
  9. use Filament\Tables;
  10. use Filament\Tables\Columns\TextColumn;
  11. use Filament\Tables\Table;
  12. use Illuminate\Database\Eloquent\Builder;
  13. use Illuminate\Support\Facades\Hash;
  14. class UserResource extends Resource
  15. {
  16. protected static ?string $model = User::class;
  17. protected static ?string $modelLabel = "使用者管理";
  18. protected static ?string $navigationIcon = 'heroicon-o-user-circle';
  19. protected static ?string $navigationLabel = "使用者管理";
  20. public static function form(Form $form): Form
  21. {
  22. return $form
  23. ->schema([
  24. //
  25. TextInput::make("name")->required()->autocomplete(false),
  26. TextInput::make("email")->required()->email()->unique(ignoreRecord: true)->autocomplete(false),
  27. TextInput::make("password")
  28. ->password()
  29. ->dehydrateStateUsing(fn (string $state): string => Hash::make($state))
  30. ->dehydrated(fn (?string $state): bool => filled($state))
  31. ->required(fn (string $operation): bool => $operation === 'create'),
  32. Select::make('roles')->label("權限選擇")
  33. ->relationship(
  34. name: 'roles',
  35. titleAttribute: 'name',
  36. modifyQueryUsing: fn (Builder $query) => $query->whereNotIn("id", [1,2]),)
  37. ->multiple()
  38. ->preload()
  39. ]);
  40. }
  41. public static function table(Table $table): Table
  42. {
  43. return $table
  44. ->columns([
  45. TextColumn::make("name")->label("使用者名稱"),
  46. TextColumn::make("email")->label("E-Mail"),
  47. TextColumn::make('created_at')->label("建立時間")->date()
  48. ])->query(function (User $query) {
  49. return $query->where('email', '!=', env("SUPER_ADMIN_ACCOUNT", "admin@ogilvy.com"));
  50. })
  51. ->filters([
  52. //
  53. ])
  54. ->actions([
  55. Tables\Actions\EditAction::make(),
  56. ])
  57. ->bulkActions([
  58. Tables\Actions\BulkActionGroup::make([
  59. Tables\Actions\DeleteBulkAction::make(),
  60. ]),
  61. ]);
  62. }
  63. public static function getRelations(): array
  64. {
  65. return [
  66. //
  67. ];
  68. }
  69. public static function getPages(): array
  70. {
  71. return [
  72. 'index' => Pages\ListUsers::route('/'),
  73. 'create' => Pages\CreateUser::route('/create'),
  74. 'edit' => Pages\EditUser::route('/{record}/edit'),
  75. ];
  76. }
  77. }