query('menu_id'); $user = Auth::user(); $userId = $user->id; // Ambil role_id yang dimiliki user $roleIds = DB::table('user_role') ->where('user_id', $userId) ->pluck('role_id'); // Ambil data akses berdasarkan role_id dan menu_id $roleAccess = DB::table('role_menu') ->whereIn('role_id', $roleIds) ->where('menu_id', $menuId) ->first(); // Pastikan roleAccess tidak null sebelum mengakses properti $creator = $roleAccess->allow_create ?? 0; $updater = $roleAccess->allow_update ?? 0; $destroyer = $roleAccess->allow_destroy ?? 0; return view("roles.index", compact('creator', 'updater', 'destroyer')); } /** * Show the form for creating a new resource. */ public function create() { return view("roles.create"); } /** * Store a newly created resource in storage. */ public function store(RoleRequest $request) { try{ $validate_role = $request->validated(); DB::beginTransaction(); Role::create($validate_role); DB::commit(); return response()->json(['message' => 'Role created successfully'], 201); } catch(\Exception $e){ DB::rollBack(); return response()->json(['message' => $e->getMessage()], 500); } } /** * Display the specified resource. */ public function show(string $id) { // } /** * Show the form for editing the specified resource. */ public function edit(string $id) { $role = Role::findOrFail($id); return view("roles.edit", compact('role')); } /** * Update the specified resource in storage. */ public function update(RoleRequest $request, string $id) { try{ $validate_role = $request->validated(); $role = Role::findOrFail($id); DB::beginTransaction(); $role->update($validate_role); DB::commit(); return response()->json(['message' => 'Role updated successfully'], 200); }catch(\Exception $e){ DB::rollBack(); return response()->json(['message' => $e->getMessage()], 500); } } /** * Remove the specified resource from storage. */ public function destroy(string $id) { try{ DB::beginTransaction(); Role::findOrFail($id)->delete(); DB::commit(); return response()->json(['success' => true, "message" => "Successfully deleted"]); }catch(\Exception $e){ DB::rollBack(); return response()->json(['success' => false, "message" => $e->getMessage()]); } } public function menu_permission(string $role_id){ try{ $role = Role::findOrFail($role_id); $menus = Menu::all(); $role_menus = RoleMenu::where('role_id', $role_id)->get() ?? collect(); return view('roles.role_menu', compact('role', 'menus', 'role_menus')); }catch(\Exception $e){ return redirect()->back()->with("error", $e->getMessage()); } } public function update_menu_permission(Request $request, string $role_id){ try{ $validateData = $request->validate([ "permissions" => "array", "permissions.*.allow_show" => "nullable|boolean", "permissions.*.allow_create" => "nullable|boolean", "permissions.*.allow_update" => "nullable|boolean", "permissions.*.allow_destroy" => "nullable|boolean" ]); $role = Role::find($role_id); $permissionsArray = []; foreach ($validateData['permissions'] as $menu_id => $permission) { $permissionsArray[$menu_id] = [ "allow_show" => (int) ($permission["allow_show"] ?? 0), "allow_create" => (int) ($permission["allow_create"] ?? 0), "allow_update" => (int) ($permission["allow_update"] ?? 0), "allow_destroy" => (int) ($permission["allow_destroy"] ?? 0), "updated_at" => now(), ]; } // Sync will update existing records and insert new ones $role->menus()->sync($permissionsArray); return redirect()->route("role-menu.permission", $role_id)->with('success','Menu Permission updated successfully'); }catch(\Exception $e){ Log::error("Error updating role_menu:", ["error" => $e->getMessage()]); return redirect()->route("role-menu.permission", $role_id)->with("error", $e->getMessage()); } } }