Denis 1 year ago
parent
commit
d3c0f2fd87

+ 2 - 2
app/DataTransferObjects/PermissionDtop.php → app/DataTransferObjects/PermissionDto.php

@@ -10,7 +10,7 @@ public function __construct(
         public string $scope,
         public string $description,
         public string $bits,
-        public string $parent_id,
+        public ?string $parent_id,
     ) {
     }
 
@@ -30,7 +30,7 @@ public static function fromArray(array $data): self
             scope: $data['scope'],
             description: $data['description'],
             bits: $data['bits'],
-            parent_id: $data['parent_id'],
+            parent_id: isset($data['parent_id']) ? $data['parent_id'] : null,
         );
     }
 }

+ 1 - 1
app/DataTransferObjects/UserDto.php

@@ -10,7 +10,7 @@ public function __construct(
         public string $name,
         public string $email,
         public string $password,
-        public string $type,
+        public ?string $type,
     ) {
     }
 

+ 0 - 27
app/DataTransferObjects/UserTypeDto.php

@@ -1,27 +0,0 @@
-<?php
-
-namespace App\DataTransferObjects;
-
-use App\Http\Requests\UserTypeRequest;
-
-readonly class UserTypeDto
-{
-    public function __construct(
-        public string $type,
-    ) {
-    }
-
-    public static function fromRequest(UserTypeRequest $request): self
-    {
-        return new self(
-            type: $request->validated('type'),
-        );
-    }
-
-    public static function fromArray(array $data): self
-    {
-        return new self(
-            type: $data['type'],
-        );
-    }
-}

+ 4 - 9
app/Http/Controllers/AuthController.php

@@ -5,13 +5,14 @@
 use App\DataTransferObjects\AuthDto;
 use App\Http\Requests\AuthRequest;
 use App\Http\Requests\RefreshTokenRequest;
-use Illuminate\Http\Request;
 use Illuminate\Http\JsonResponse;
 use App\Http\Resources\AuthResource;
 use App\Services\AuthService;
 use App\DataTransferObjects\RefreshTokenDto;
+use Illuminate\Http\Request;
 
 class AuthController extends Controller
+
 {
     public function __construct(
         protected AuthService $authService,
@@ -29,24 +30,18 @@ public function login(AuthRequest $request): JsonResponse
         return $this->successResponse(payload: new AuthResource($tokens), message: __('auth.logged_in'));
     }
 
-    public function logout(Request $request): JsonResponse
+    public function logout(): JsonResponse
     {
-        $user = $request->user();
-        if (!$user) {
-            return $this->successResponse(message: __('auth.logout'));
-        }
-        $user()->tokens()->delete();
+        $this->authService->logout();
         return $this->successResponse(message: __('auth.logout'));
     }
 
     public function refresh(RefreshTokenRequest $request): JsonResponse
     {
-
         $tokens = $this->authService->refresh(RefreshTokenDto::fromRequest($request));
         if (is_null($tokens)) {
             return $this->errorResponse(message: __('auth.unauthorized'), code: 403);
         }
-
         return $this->successResponse(payload: new AuthResource($tokens));
     }
 }

+ 4 - 4
app/Http/Controllers/UserTypePermissionController.php

@@ -2,11 +2,10 @@
 
 namespace App\Http\Controllers;
 
-use App\Http\Requests\UserTypeRequest;
-use App\DataTransferObjects\UserTypeDto;
 use App\Http\Resources\UserTypePermissionResource;
 use App\Services\UserTypePermissionService;
 use Illuminate\Http\JsonResponse;
+use Illuminate\Support\Facades\Auth;
 
 class UserTypePermissionController extends Controller
 {
@@ -21,9 +20,10 @@ public function allGuestPermissions(): JsonResponse
         return $this->successResponse(payload: new UserTypePermissionResource($userTypePermission));
     }
 
-    public function allPermissionsByUserType(UserTypeRequest $request): JsonResponse
+    public function allPermissionsByUserType(): JsonResponse
     {
-        $userTypePermission = $this->userTypePermissionService->allPermissionsByUserType(UserTypeDto::fromRequest($request));
+        $user = Auth::user();
+        $userTypePermission = $this->userTypePermissionService->allPermissionsByUserType($user->user_type);
         return $this->successResponse(payload: new UserTypePermissionResource($userTypePermission));
     }
 }

+ 0 - 17
app/Http/Requests/UserTypeRequest.php

@@ -1,17 +0,0 @@
-<?php
-
-namespace App\Http\Requests;
-
-use Illuminate\Foundation\Http\FormRequest;
-use App\Enums\UserTypeSource;
-use Illuminate\Validation\Rule;
-
-class UserTypeRequest extends FormRequest
-{
-    public function rules(): array
-    {
-        return [
-            'type' => ['required', Rule::enum(UserTypeSource::class)],
-        ];
-    }
-}

+ 2 - 0
app/Repositories/PermissionRepository.php

@@ -54,6 +54,8 @@ public function store(PermissionDto $permissionDto): Permission
             $permission->prependToNode($parent);
         }
 
+        $permission->save();
+
         return $permission;
     }
 

+ 2 - 2
app/Repositories/UserTypePermissionRepository.php

@@ -12,8 +12,8 @@ public function allGuestPermissions(): ?UserTypePermission
         return UserTypePermission::where('user_type', 'guest')->with('permission')->get();
     }
 
-    public function allPermissionsByUserType(UserTypeDto $userType): ?UserTypePermission
+    public function allPermissionsByUserType(string $userType): ?UserTypePermission
     {
-        return UserTypePermission::where('user_type', $userType->type)->with('permission')->get();
+        return UserTypePermission::where('user_type', $userType)->with('permission')->get();
     }
 }

+ 1 - 1
app/Repositories/UserTypePermissionRepositoryInterface.php

@@ -9,5 +9,5 @@ interface UserTypePermissionRepositoryInterface
 {
     public function allGuestPermissions(): ?UserTypePermission;
 
-    public function allPermissionsByUserType(UserTypeDto $userType): ?UserTypePermission;
+    public function allPermissionsByUserType(string $userType): ?UserTypePermission;
 }

+ 7 - 0
app/Services/AuthService.php

@@ -51,4 +51,11 @@ public function refresh(RefreshTokenDto $refreshToken): ?array
 
         return ['access_token' => $accessToken, 'refresh_token' => $refreshToken];
     }
+
+    public function logout(): void
+    {
+        $user = Auth::user();
+        $userModel = $this->userRepository->find($user->id);
+        $userModel->tokens()->delete();
+    }
 }

+ 1 - 1
app/Services/UserTypePermissionService.php

@@ -18,7 +18,7 @@ public function allGuestPermissions(): ?UserTypePermission
         return $this->userTypePermissionRepository->allGuestPermissions();
     }
 
-    public function allPermissionsByUserType(UserTypeDto $userType): ?UserTypePermission
+    public function allPermissionsByUserType(string $userType): ?UserTypePermission
     {
         return $this->userTypePermissionRepository->allPermissionsByUserType($userType);
     }

+ 1 - 1
database/migrations/0001_01_01_000000_create_users_table.php

@@ -17,7 +17,7 @@ public function up(): void
             $table->string('email')->unique();
             $table->timestamp('email_verified_at')->nullable();
             $table->string('password');
-            $table->string('type')->default('user');
+            $table->string('type')->default('guest');
             $table->string('language')->default('pt');
             $table->rememberToken();
             $table->timestamps();

+ 2 - 0
database/migrations/2024_07_16_175714_create_permissions_and_user_type_permissions_table.php

@@ -14,6 +14,8 @@ public function up(): void
             $table->string('description');
             $table->integer('bits');
             $table->unsignedBigInteger('parent_id')->nullable();
+            $table->integer('_lft');
+            $table->integer('_rgt');
             $table->timestamps();
             $table->softDeletes();
         });

+ 4 - 5
database/seeders/DatabaseSeeder.php

@@ -3,8 +3,6 @@
 namespace Database\Seeders;
 
 use Illuminate\Database\Seeder;
-use Database\Seeders\PermissionSeeder;
-use Database\Seeders\UserSeeder;
 
 class DatabaseSeeder extends Seeder
 {
@@ -13,9 +11,10 @@ class DatabaseSeeder extends Seeder
      */
     public function run(): void
     {
-        $this->call(
+        $this->call([
             UserSeeder::class,
-            PermissionSeeder::class
-        );
+            PermissionSeeder::class,
+            UserTypePermissionSeeder::class,
+        ]);
     }
 }

+ 2 - 3
database/seeders/PermissionSeeder.php

@@ -5,7 +5,6 @@
 use App\DataTransferObjects\PermissionDto;
 use Illuminate\Database\Seeder;
 use App\Services\PermissionService;
-
 class PermissionSeeder extends Seeder
 {
     public function __construct(
@@ -13,7 +12,7 @@ public function __construct(
     ) {
     }
 
-    public function run()
+    public function run(): void
     {
         // Criação de Permissões
         /*
@@ -43,8 +42,8 @@ public function run()
                 'children' => []
             ],
         ];
+
         $this->createPermissionsAndChildren($permissions);
-        $this->command->info('Permissions seeded successfully.');
     }
 
     private function createPermissionsAndChildren(array $permissions)

+ 3 - 1
database/seeders/UserSeeder.php

@@ -13,11 +13,13 @@ class UserSeeder extends Seeder
      */
     public function run(): void
     {
-        User::firstOrNew([
+        $user = User::firstOrNew([
             'name' => 'suporte',
             'email' => 'suporte@softpar.inf.br',
             'password' => bcrypt('S@ft2080.'),
             'type' => UserTypeSource::Admin,
         ]);
+
+        $user->save();
     }
 }

+ 43 - 0
database/seeders/UserTypePermissionSeeder.php

@@ -0,0 +1,43 @@
+<?php
+
+namespace Database\Seeders;
+
+use App\Models\Permission;
+use App\Models\UserTypePermission;
+use Illuminate\Database\Seeder;
+use App\Enums\UserTypeSource;
+use Illuminate\Support\Facades\Log;
+
+class UserTypePermissionSeeder extends Seeder
+{
+    /**
+     * Seed the application's database.
+     */
+    public function run(): void
+    {
+        foreach (UserTypeSource::cases() as $userType) {
+            switch ($userType) {
+                case UserTypeSource::Admin:
+                    $permissions = Permission::get();
+                    foreach ($permissions as $permission) {
+                        $userTypePermission = UserTypePermission::firstOrNew([
+                            'user_type' => UserTypeSource::Admin->value,
+                            'permission_id' => $permission->id,
+                            'bits' => $permission->bits,
+                        ]);
+                        $userTypePermission->save();
+                    }
+                    break;
+                case UserTypeSource::Guest:
+                    // Add relevant permissions for Guest
+                    break;
+                case UserTypeSource::RegularUser:
+                    // Add relevant permissions for RegularUser
+                    break;
+                case UserTypeSource::PayingUser:
+                    // Add relevant permissions for PayingUser
+                    break;
+            }
+        }
+    }
+}

+ 2 - 2
routes/api.php

@@ -2,14 +2,14 @@
 
 use Illuminate\Support\Facades\Route;
 
-Route::middleware(['api'])->group(function () {
+Route::middleware([])->group(function () {
     $noAuthRoutes = glob(__DIR__ . "/noAuthRoutes/*.php");
     foreach ($noAuthRoutes as $noAuthRoute) {
         Route::group([], $noAuthRoute);
     }
 });
 
-Route::middleware(['auth:sanctum', 'api'])->group(function () {
+Route::middleware(['auth:sanctum'])->group(function () {
     $authRoutes = glob(__DIR__ . "/authRoutes/*.php");
     foreach ($authRoutes as $authRoute) {
         Route::group([], $authRoute);

+ 6 - 0
routes/authRoutes/auth.php

@@ -0,0 +1,6 @@
+<?php
+
+use Illuminate\Support\Facades\Route;
+use App\Http\Controllers\AuthController;
+
+Route::post('/logout', [AuthController::class, 'logout']);

+ 0 - 2
routes/noAuthRoutes/auth.php

@@ -5,6 +5,4 @@
 
 Route::post('/login', [AuthController::class, 'login']);
 
-Route::post('/logout', [AuthController::class, 'logout']);
-
 Route::post('/refresh', [AuthController::class, 'refresh']);