service->list($this->resource($request), $request->validated(), $request->user(), $this->tenantId($request)); return $this->successPaginated($data, NasResource::class, 'Data NAS berhasil diambil'); } public function store(StoreNasResourceRequest $request) { $data = $this->service->create($this->resource($request), $request->validated(), $request->user(), $this->tenantId($request)); return $this->created(new NasResource($data), 'Data NAS berhasil dibuat'); } public function show(Request $request, int $id) { $data = $this->service->find($this->resource($request), $id); $this->authorizeTenant($request, $data->tenant_id); return $this->success(new NasResource($data), 'Detail NAS berhasil diambil'); } public function update(UpdateNasResourceRequest $request, int $id) { $resource = $this->resource($request); $model = $this->service->find($resource, $id); $this->authorizeTenant($request, $model->tenant_id); $data = $this->service->update($resource, $model, $request->validated(), $request->user()); return $this->updated(new NasResource($data), 'Data NAS berhasil diupdate'); } public function destroy(Request $request, int $id) { $model = $this->service->find($this->resource($request), $id); $this->authorizeTenant($request, $model->tenant_id); $this->service->delete($model); return $this->deleted('Data NAS berhasil dihapus'); } private function resource(Request $request): string { return $request->route()->defaults['nas_resource']; } private function tenantId(Request $request): ?int { return $request->attributes->get('tenant_id'); } private function authorizeTenant(Request $request, int $tenantId): void { abort_unless($request->user()->isMasterAdmin() || $tenantId === $this->tenantId($request), 403); } }