diff --git a/app/Http/Middleware/HandleInertiaRequests.php b/app/Http/Middleware/HandleInertiaRequests.php index 3867f22..12b6f4e 100644 --- a/app/Http/Middleware/HandleInertiaRequests.php +++ b/app/Http/Middleware/HandleInertiaRequests.php @@ -27,13 +27,27 @@ class HandleInertiaRequests extends Middleware * * @return array */ + // public function share(Request $request): array + // { + // return [ + // ...parent::share($request), + // 'auth' => [ + // 'user' => $request->user(), + // ], + // ]; + // } + public function share(Request $request): array { - return [ - ...parent::share($request), + return array_merge(parent::share($request), [ 'auth' => [ - 'user' => $request->user(), + 'user' => $request->user() ? [ + 'id' => $request->user()->id, + 'name' => $request->user()->name, + 'permissions' => $request->user()->getPermissionArray(), // Kirim permissions + ] : null, ], - ]; + ]); } + } diff --git a/app/Http/Requests/RoleRequest.php b/app/Http/Requests/RoleRequest.php index 5619589..f49087c 100644 --- a/app/Http/Requests/RoleRequest.php +++ b/app/Http/Requests/RoleRequest.php @@ -11,7 +11,7 @@ class RoleRequest extends FormRequest */ public function authorize(): bool { - return false; + return true; } /** diff --git a/app/Models/User.php b/app/Models/User.php index b99dbcf..36a1207 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -46,4 +46,16 @@ class User extends Authenticatable /*implements MustVerifyEmail*/ 'password' => 'hashed', ]; } + + public function getPermissionArray() + { + + return $this->getAllPermissions()->mapWithKeys(function ($permission) { + return [$permission->name => true]; + })->toArray(); + + } + + + } diff --git a/bootstrap/app.php b/bootstrap/app.php index ac0a023..73d4576 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -13,7 +13,6 @@ return Application::configure(basePath: dirname(__DIR__)) ) ->withMiddleware(function (Middleware $middleware) { $middleware->web(append: [ - \App\Http\Middleware\HandleInertiaRequests::class, \Illuminate\Http\Middleware\AddLinkHeadersForPreloadedAssets::class, HandleInertiaRequests::class, ]); @@ -22,6 +21,7 @@ return Application::configure(basePath: dirname(__DIR__)) 'role' => \Spatie\Permission\Middleware\RoleMiddleware::class, 'permission' => \Spatie\Permission\Middleware\PermissionMiddleware::class, 'role_or_permission' => \Spatie\Permission\Middleware\RoleOrPermissionMiddleware::class, + //'auth' => \App\Http\Middleware\HandleInertiaRequests::class,//harus nya gini sih, karena di route nya lu pake middleware auth ]); }) ->withExceptions(function (Exceptions $exceptions) { diff --git a/resources/js/pages/admin/roles/index_roles.jsx b/resources/js/pages/admin/roles/index_roles.jsx new file mode 100644 index 0000000..9044f49 --- /dev/null +++ b/resources/js/pages/admin/roles/index_roles.jsx @@ -0,0 +1,157 @@ +import AuthenticatedLayout from "@/layouts/authenticated-layout"; +import { Head, usePage, router } from "@inertiajs/react"; +import React, { useState } from "react"; +import hasAnyPermission from "@/utils/hasAnyPermission"; +import { + Dialog, + DialogContent, + DialogDescription, + DialogFooter, + DialogHeader, + DialogTitle, +} from "@/components/ui/dialog"; +import { Button } from "@/components/ui/button"; +import Pagination from "@/components/pagination"; + +export default function RolesIndex() { + const { roles } = usePage().props; + const [dialogOpen, setDialogOpen] = useState(false); + const [roleToDelete, setRoleToDelete] = useState(null); + + const handleDelete = (id) => { + setRoleToDelete(id); + setDialogOpen(true); + }; + + const confirmDelete = () => { + router.delete(`/admin/roles/${roleToDelete}`, { + onSuccess: () => { + setDialogOpen(false); + setRoleToDelete(null); + }, + }); + }; + + return ( + + + +
+
+
+
+ {hasAnyPermission(["Roles.index"]) && ( + + + Add Role + + )} +
+
+
+ +
+
+
+ + + + + + + + + + + {roles.data.map((role, index) => ( + + + + + + + ))} + +
+ No. + Role NamePermissions + Actions +
+ {index + + 1 + + (roles.current_page - 1) * + roles.per_page} + {role.name} +
+ {role.permissions.map( + (permission, i) => ( + + { + permission.name + } + + ) + )} +
+
+ {/* {hasAnyPermission([ + "roles.edit", + ]) && ( */} + + {" "} + Edit + + {/* )} */} + {/* {hasAnyPermission([ + "roles.delete", + ]) && ( */} + + {/* )} */} +
+
+ +
+
+
+ + + + + Apakah Anda yakin? + + Data ini akan dihapus secara permanen! + + + + + + + + +
+ ); +} diff --git a/resources/js/pages/admin/users/index_users.tsx b/resources/js/pages/admin/users/index_users.tsx new file mode 100644 index 0000000..e69de29