소스 검색

fix: blocked user

부모
커밋
bc73f80c6d
7개의 변경된 파일68개의 추가작업 그리고 28개의 파일을 삭제
  1. 7
    1
      app/Http/Controllers/UserController.php
  2. 15
    12
      app/Http/Kernel.php
  3. 30
    0
      app/Http/Middleware/CheckBlocked.php
  4. 1
    0
      lang/en/messages.php
  5. 1
    0
      lang/id/messages.php
  6. 13
    14
      resources/js/pages/Users/Edit.vue
  7. 1
    1
      routes/web.php

+ 7
- 1
app/Http/Controllers/UserController.php 파일 보기

@@ -105,7 +105,13 @@ class UserController extends Controller
105 105
     public function edit(User $user)
106 106
     {
107 107
         return inertia("Users/Edit", [
108
-            "user" => $user,
108
+            "user" => [
109
+                "id" => $user->id,
110
+                "name" => $user->name,
111
+                "username" => $user->username,
112
+                "role_id" => $user->role_id,
113
+                "status" => $user->getRawOriginal("status"),
114
+            ],
109 115
             "roles" => Role::whereNotIn("id", [1])
110 116
                 ->get()
111 117
                 ->transform(

+ 15
- 12
app/Http/Kernel.php 파일 보기

@@ -29,7 +29,7 @@ class Kernel extends HttpKernel
29 29
      * @var array<string, array<int, class-string|string>>
30 30
      */
31 31
     protected $middlewareGroups = [
32
-        'web' => [
32
+        "web" => [
33 33
             \App\Http\Middleware\EncryptCookies::class,
34 34
             \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
35 35
             \Illuminate\Session\Middleware\StartSession::class,
@@ -40,9 +40,9 @@ class Kernel extends HttpKernel
40 40
             \App\Http\Middleware\HandleInertiaRequests::class,
41 41
         ],
42 42
 
43
-        'api' => [
43
+        "api" => [
44 44
             // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
45
-            'throttle:api',
45
+            "throttle:api",
46 46
             \Illuminate\Routing\Middleware\SubstituteBindings::class,
47 47
         ],
48 48
     ];
@@ -55,14 +55,17 @@ class Kernel extends HttpKernel
55 55
      * @var array<string, class-string|string>
56 56
      */
57 57
     protected $routeMiddleware = [
58
-        'auth' => \App\Http\Middleware\Authenticate::class,
59
-        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
60
-        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
61
-        'can' => \Illuminate\Auth\Middleware\Authorize::class,
62
-        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
63
-        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
64
-        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
65
-        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
66
-        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
58
+        "auth" => \App\Http\Middleware\Authenticate::class,
59
+        "auth.basic" =>
60
+            \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
61
+        "cache.headers" => \Illuminate\Http\Middleware\SetCacheHeaders::class,
62
+        "can" => \Illuminate\Auth\Middleware\Authorize::class,
63
+        "guest" => \App\Http\Middleware\RedirectIfAuthenticated::class,
64
+        "password.confirm" =>
65
+            \Illuminate\Auth\Middleware\RequirePassword::class,
66
+        "signed" => \Illuminate\Routing\Middleware\ValidateSignature::class,
67
+        "throttle" => \Illuminate\Routing\Middleware\ThrottleRequests::class,
68
+        "verified" => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
69
+        "checkBlocked" => \App\Http\Middleware\CheckBlocked::class,
67 70
     ];
68 71
 }

+ 30
- 0
app/Http/Middleware/CheckBlocked.php 파일 보기

@@ -0,0 +1,30 @@
1
+<?php
2
+
3
+namespace App\Http\Middleware;
4
+
5
+use Closure;
6
+use Illuminate\Http\Request;
7
+
8
+class CheckBlocked
9
+{
10
+    /**
11
+     * Handle an incoming request.
12
+     *
13
+     * @param  \Illuminate\Http\Request  $request
14
+     * @param  \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse)  $next
15
+     * @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
16
+     */
17
+    public function handle(Request $request, Closure $next)
18
+    {
19
+        if ($request->user()->getRawOriginal("status") === 0) {
20
+            auth()->logout();
21
+
22
+            return to_route("login")->with(
23
+                "error",
24
+                __("messages.user.blocked_user")
25
+            );
26
+        }
27
+
28
+        return $next($request);
29
+    }
30
+}

+ 1
- 0
lang/en/messages.php 파일 보기

@@ -14,6 +14,7 @@ return [
14 14
     "user" => [
15 15
         "active_user" => "Successfully active the user",
16 16
         "no_active_user" => "Successfully block user",
17
+        "blocked_user" => "Oops your are account blocked",
17 18
     ],
18 19
 
19 20
     "success" => [

+ 1
- 0
lang/id/messages.php 파일 보기

@@ -14,6 +14,7 @@ return [
14 14
     "user" => [
15 15
         "active_user" => "Sukses mengaktifkan user",
16 16
         "no_active_user" => "Sukses memblokir user",
17
+        "blocked_user" => "Oops akun kamu telah diblokir",
17 18
     ],
18 19
 
19 20
     "success" => [

+ 13
- 14
resources/js/pages/Users/Edit.vue 파일 보기

@@ -4,7 +4,6 @@ import { useConfirm } from 'primevue/useconfirm'
4 4
 import { useForm } from '@/composables/useForm'
5 5
 import AppInputText from '@/components/AppInputText.vue'
6 6
 import AppDropdown from '@/components/AppDropdown.vue'
7
-import AppButtonLink from '@/components/AppButtonLink.vue'
8 7
 import DashboardLayout from '@/layouts/Dashboard/DashboardLayout.vue'
9 8
 
10 9
 const props = defineProps({
@@ -12,19 +11,19 @@ const props = defineProps({
12 11
   roles: Array,
13 12
 })
14 13
 
15
-const deleteConfirm = useConfirm()
14
+const blockConfirm = useConfirm()
16 15
 
17
-const onDeleteUser = () => {
18
-  deleteConfirm.require({
19
-    message: `Yakin akan menghapus (${props.user.username}) ?`,
20
-    header: 'Hapus User',
21
-    acceptLabel: 'Hapus',
16
+const onBlockConfirm = () => {
17
+  blockConfirm.require({
18
+    message: `Yakin akan memblokir (${props.user.username}) ?`,
19
+    header: 'Blokir User',
20
+    acceptLabel: props.user.status ? 'Blokir' : 'Aktifkan',
22 21
     rejectLabel: 'Batalkan',
23 22
     accept: () => {
24
-      Inertia.delete(route('users.destroy', props.user.id))
23
+      Inertia.delete(route('users.block', props.user.id))
25 24
     },
26 25
     reject: () => {
27
-      deleteConfirm.close()
26
+      blockConfirm.close()
28 27
     },
29 28
   })
30 29
 }
@@ -84,13 +83,13 @@ const onSubmit = () => {
84 83
 
85 84
           <template #footer>
86 85
             <div class="flex flex-column md:flex-row justify-content-end">
87
-              <AppButtonLink
86
+              <Button
88 87
                 v-if="user.role_id !== 1"
89
-                label="Blokir"
90 88
                 icon="pi pi-ban"
91
-                method="delete"
92
-                class="p-button-outlined p-button-danger md:mr-3 mb-3 md:mb-0"
93
-                :href="route('users.block', user.id)"
89
+                class="p-button-outlined md:mr-3 mb-3 md:mb-0"
90
+                :class="[user.status ? 'p-button-danger' : 'p-button-success']"
91
+                :label="user.status ? 'Blokir' : 'Aktifkan'"
92
+                @click="onBlockConfirm"
94 93
               />
95 94
 
96 95
               <Button

+ 1
- 1
routes/web.php 파일 보기

@@ -24,7 +24,7 @@ use Illuminate\Support\Facades\Route;
24 24
 |
25 25
  */
26 26
 
27
-Route::middleware(["auth", "verified"])->group(function () {
27
+Route::middleware(["auth", "verified", "checkBlocked"])->group(function () {
28 28
     Route::get("/", DashboardController::class);
29 29
 
30 30
     Route::get("/dashboards", DashboardController::class);