feat: Tambahkan fitur untuk menampilkan roles dan users
parent
994496d1ba
commit
d2102bfb5d
|
@ -27,13 +27,27 @@ class HandleInertiaRequests extends Middleware
|
||||||
*
|
*
|
||||||
* @return array<string, mixed>
|
* @return array<string, mixed>
|
||||||
*/
|
*/
|
||||||
|
// public function share(Request $request): array
|
||||||
|
// {
|
||||||
|
// return [
|
||||||
|
// ...parent::share($request),
|
||||||
|
// 'auth' => [
|
||||||
|
// 'user' => $request->user(),
|
||||||
|
// ],
|
||||||
|
// ];
|
||||||
|
// }
|
||||||
|
|
||||||
public function share(Request $request): array
|
public function share(Request $request): array
|
||||||
{
|
{
|
||||||
return [
|
return array_merge(parent::share($request), [
|
||||||
...parent::share($request),
|
|
||||||
'auth' => [
|
'auth' => [
|
||||||
'user' => $request->user(),
|
'user' => $request->user() ? [
|
||||||
|
'id' => $request->user()->id,
|
||||||
|
'name' => $request->user()->name,
|
||||||
|
'permissions' => $request->user()->getPermissionArray(), // Kirim permissions
|
||||||
|
] : null,
|
||||||
],
|
],
|
||||||
];
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,7 @@ class RoleRequest extends FormRequest
|
||||||
*/
|
*/
|
||||||
public function authorize(): bool
|
public function authorize(): bool
|
||||||
{
|
{
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -46,4 +46,16 @@ class User extends Authenticatable /*implements MustVerifyEmail*/
|
||||||
'password' => 'hashed',
|
'password' => 'hashed',
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getPermissionArray()
|
||||||
|
{
|
||||||
|
|
||||||
|
return $this->getAllPermissions()->mapWithKeys(function ($permission) {
|
||||||
|
return [$permission->name => true];
|
||||||
|
})->toArray();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,6 @@ return Application::configure(basePath: dirname(__DIR__))
|
||||||
)
|
)
|
||||||
->withMiddleware(function (Middleware $middleware) {
|
->withMiddleware(function (Middleware $middleware) {
|
||||||
$middleware->web(append: [
|
$middleware->web(append: [
|
||||||
\App\Http\Middleware\HandleInertiaRequests::class,
|
|
||||||
\Illuminate\Http\Middleware\AddLinkHeadersForPreloadedAssets::class,
|
\Illuminate\Http\Middleware\AddLinkHeadersForPreloadedAssets::class,
|
||||||
HandleInertiaRequests::class,
|
HandleInertiaRequests::class,
|
||||||
]);
|
]);
|
||||||
|
@ -22,6 +21,7 @@ return Application::configure(basePath: dirname(__DIR__))
|
||||||
'role' => \Spatie\Permission\Middleware\RoleMiddleware::class,
|
'role' => \Spatie\Permission\Middleware\RoleMiddleware::class,
|
||||||
'permission' => \Spatie\Permission\Middleware\PermissionMiddleware::class,
|
'permission' => \Spatie\Permission\Middleware\PermissionMiddleware::class,
|
||||||
'role_or_permission' => \Spatie\Permission\Middleware\RoleOrPermissionMiddleware::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) {
|
->withExceptions(function (Exceptions $exceptions) {
|
||||||
|
|
|
@ -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 (
|
||||||
|
<AuthenticatedLayout header="Kelompok Pengguna">
|
||||||
|
<Head title="Kelompok Pengguna" />
|
||||||
|
|
||||||
|
<div className="container mx-auto p-4">
|
||||||
|
<div className="row mb-3">
|
||||||
|
<div className="col-md-12">
|
||||||
|
<div className="d-flex justify-content-between align-items-center">
|
||||||
|
{hasAnyPermission(["Roles.index"]) && (
|
||||||
|
<Link
|
||||||
|
href="/admin/role/create"
|
||||||
|
className="btn btn-success"
|
||||||
|
>
|
||||||
|
<i className="bi bi-plus-circle-fill me-2"></i>
|
||||||
|
Add Role
|
||||||
|
</Link>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="card border rounded">
|
||||||
|
<div className="card-body p-0">
|
||||||
|
<div className="table-responsive p-4">
|
||||||
|
<table className="table align-middle">
|
||||||
|
<thead className="table-light">
|
||||||
|
<tr>
|
||||||
|
<th scope="col" className="text-center">
|
||||||
|
No.
|
||||||
|
</th>
|
||||||
|
<th scope="col">Role Name</th>
|
||||||
|
<th scope="col">Permissions</th>
|
||||||
|
<th scope="col" className="text-center">
|
||||||
|
Actions
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{roles.data.map((role, index) => (
|
||||||
|
<tr key={role.id}>
|
||||||
|
<td className="text-center">
|
||||||
|
{index +
|
||||||
|
1 +
|
||||||
|
(roles.current_page - 1) *
|
||||||
|
roles.per_page}
|
||||||
|
</td>
|
||||||
|
<td>{role.name}</td>
|
||||||
|
<td>
|
||||||
|
<div className="d-flex flex-wrap gap-1">
|
||||||
|
{role.permissions.map(
|
||||||
|
(permission, i) => (
|
||||||
|
<span
|
||||||
|
key={i}
|
||||||
|
className="badge bg-success text-white badge-lg"
|
||||||
|
>
|
||||||
|
{
|
||||||
|
permission.name
|
||||||
|
}
|
||||||
|
</span>
|
||||||
|
)
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
<td className="text-center">
|
||||||
|
{/* {hasAnyPermission([
|
||||||
|
"roles.edit",
|
||||||
|
]) && ( */}
|
||||||
|
<Link
|
||||||
|
href={`/admin/roles/${role.id}/edit`}
|
||||||
|
className="btn btn-primary btn-md me-2"
|
||||||
|
>
|
||||||
|
<i className="bi bi-pencil"></i>{" "}
|
||||||
|
Edit
|
||||||
|
</Link>
|
||||||
|
{/* )} */}
|
||||||
|
{/* {hasAnyPermission([
|
||||||
|
"roles.delete",
|
||||||
|
]) && ( */}
|
||||||
|
<button
|
||||||
|
onClick={() =>
|
||||||
|
handleDelete(role.id)
|
||||||
|
}
|
||||||
|
className="btn btn-danger btn-md"
|
||||||
|
>
|
||||||
|
<i className="bi bi-trash"></i>{" "}
|
||||||
|
Delete
|
||||||
|
</button>
|
||||||
|
{/* )} */}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
))}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<Pagination links={roles.links} />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<Dialog open={dialogOpen} onOpenChange={setDialogOpen}>
|
||||||
|
<DialogContent>
|
||||||
|
<DialogHeader>
|
||||||
|
<DialogTitle>Apakah Anda yakin?</DialogTitle>
|
||||||
|
<DialogDescription>
|
||||||
|
Data ini akan dihapus secara permanen!
|
||||||
|
</DialogDescription>
|
||||||
|
</DialogHeader>
|
||||||
|
<DialogFooter>
|
||||||
|
<Button
|
||||||
|
variant="outline"
|
||||||
|
onClick={() => setDialogOpen(false)}
|
||||||
|
>
|
||||||
|
Batal
|
||||||
|
</Button>
|
||||||
|
<Button variant="destructive" onClick={confirmDelete}>
|
||||||
|
Ya, hapus!
|
||||||
|
</Button>
|
||||||
|
</DialogFooter>
|
||||||
|
</DialogContent>
|
||||||
|
</Dialog>
|
||||||
|
</AuthenticatedLayout>
|
||||||
|
);
|
||||||
|
}
|
Loading…
Reference in New Issue