From a5c5ecad0bd51b4477aa4b50038f4acc68e46b82 Mon Sep 17 00:00:00 2001 From: balajidharma Date: Fri, 19 Jan 2024 13:06:26 -0500 Subject: [PATCH 1/2] Updated route group as admin --- resources/js/Layouts/Authenticated.vue | 2 +- resources/js/Pages/Admin/Menu/Create.vue | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/resources/js/Layouts/Authenticated.vue b/resources/js/Layouts/Authenticated.vue index c0ded8d..f4fcdee 100644 --- a/resources/js/Layouts/Authenticated.vue +++ b/resources/js/Layouts/Authenticated.vue @@ -79,7 +79,7 @@ const showingNavigationDropdown = ref(false); Dashboard - + Permissions diff --git a/resources/js/Pages/Admin/Menu/Create.vue b/resources/js/Pages/Admin/Menu/Create.vue index fd44f55..e8587ea 100644 --- a/resources/js/Pages/Admin/Menu/Create.vue +++ b/resources/js/Pages/Admin/Menu/Create.vue @@ -31,7 +31,7 @@ const form = useForm({ main > Date: Thu, 1 Feb 2024 08:57:42 -0500 Subject: [PATCH 2/2] Added roles for menu items --- .../Controllers/Admin/MenuItemController.php | 29 +++++++++-------- app/Http/Middleware/HandleInertiaRequests.php | 2 +- resources/js/Components/AsideMenuItem.vue | 2 +- resources/js/Pages/Admin/Menu/Item/Create.vue | 27 ++++++++++++++-- resources/js/Pages/Admin/Menu/Item/Edit.vue | 31 +++++++++++++++++-- 5 files changed, 70 insertions(+), 21 deletions(-) diff --git a/app/Http/Controllers/Admin/MenuItemController.php b/app/Http/Controllers/Admin/MenuItemController.php index 05cb7ca..e00e4d8 100644 --- a/app/Http/Controllers/Admin/MenuItemController.php +++ b/app/Http/Controllers/Admin/MenuItemController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; +use App\Models\Role; use BalajiDharma\LaravelAdminCore\Requests\StoreMenuItemRequest; use BalajiDharma\LaravelAdminCore\Requests\UpdateMenuItemRequest; use BalajiDharma\LaravelMenu\Models\Menu; @@ -47,12 +48,10 @@ public function index(Menu $menu) */ public function create(Menu $menu) { - $item_options = MenuItem::selectOptions($menu->id, null, true); + $itemOptions = MenuItem::selectOptions($menu->id, null, true); + $roles = Role::all()->pluck('name', 'id'); - return Inertia::render('Admin/Menu/Item/Create', [ - 'menu' => $menu, - 'item_options' => $item_options, - ]); + return Inertia::render('Admin/Menu/Item/Create', compact('menu', 'itemOptions', 'roles')); } /** @@ -62,7 +61,10 @@ public function create(Menu $menu) */ public function store(StoreMenuItemRequest $request, Menu $menu) { - $menu->menuItems()->create($request->all()); + $menu->menuItems()->create($request->except(['roles'])); + + $roles = $request->roles ?? []; + $menu->assignRole($roles); return redirect()->route('admin.menu.item.index', $menu->id) ->with('message', 'Menu created successfully.'); @@ -75,13 +77,11 @@ public function store(StoreMenuItemRequest $request, Menu $menu) */ public function edit(Menu $menu, MenuItem $item) { - $item_options = MenuItem::selectOptions($menu->id, $item->parent_id ?? $item->id); + $itemOptions = MenuItem::selectOptions($menu->id, $item->parent_id ?? $item->id); + $roles = Role::all()->pluck('name', 'id'); + $itemHasRoles = array_column(json_decode($item->roles, true), 'id'); - return Inertia::render('Admin/Menu/Item/Edit', [ - 'menu' => $menu, - 'item' => $item, - 'item_options' => $item_options, - ]); + return Inertia::render('Admin/Menu/Item/Edit', compact('menu', 'item', 'itemOptions', 'roles', 'itemHasRoles')); } /** @@ -91,7 +91,10 @@ public function edit(Menu $menu, MenuItem $item) */ public function update(UpdateMenuItemRequest $request, Menu $menu, MenuItem $item) { - $item->update($request->all()); + $item->update($request->except(['roles'])); + + $roles = $request->roles ?? []; + $item->syncRoles($roles); return redirect()->route('admin.menu.item.index', $menu->id) ->with('message', 'Menu Item updated successfully.'); diff --git a/app/Http/Middleware/HandleInertiaRequests.php b/app/Http/Middleware/HandleInertiaRequests.php index dc7a14c..4c4f01f 100644 --- a/app/Http/Middleware/HandleInertiaRequests.php +++ b/app/Http/Middleware/HandleInertiaRequests.php @@ -46,7 +46,7 @@ public function share(Request $request) 'message' => fn () => $request->session()->get('message'), ], 'navigation' => [ - 'menu' => Menu::getMenuTree('admin'), + 'menu' => Menu::getMenuTree('admin', false, true), ], ]); } diff --git a/resources/js/Components/AsideMenuItem.vue b/resources/js/Components/AsideMenuItem.vue index 846027c..ba37bf1 100644 --- a/resources/js/Components/AsideMenuItem.vue +++ b/resources/js/Components/AsideMenuItem.vue @@ -38,7 +38,7 @@ const componentClass = computed(() => ( ] )) -const hasDropdown = computed(() => props.item.children) +const hasDropdown = computed(() => props.item.children && props.item.children.length) const menuClick = event => { emit('menu-click', event, props.item) diff --git a/resources/js/Pages/Admin/Menu/Item/Create.vue b/resources/js/Pages/Admin/Menu/Item/Create.vue index 62907c1..e1ac865 100644 --- a/resources/js/Pages/Admin/Menu/Item/Create.vue +++ b/resources/js/Pages/Admin/Menu/Item/Create.vue @@ -13,13 +13,18 @@ import FormControl from '@/Components/FormControl.vue' import FormCheckRadioGroup from '@/Components/FormCheckRadioGroup.vue' import BaseButton from '@/Components/BaseButton.vue' import BaseButtons from '@/Components/BaseButtons.vue' +import BaseDivider from '@/Components/BaseDivider.vue' const props = defineProps({ menu: { type: Object, default: () => ({}), }, - item_options: { + itemOptions: { + type: Object, + default: () => ({}), + }, + roles: { type: Object, default: () => ({}), }, @@ -31,7 +36,8 @@ const form = useForm({ description: '', enabled: true, parent_id: '', - weight: '' + weight: '', + roles: [] }) @@ -121,7 +127,7 @@ const form = useForm({ type="select" placeholder="--ROOT--" :error="form.errors.parent_id" - :options="item_options" + :options="itemOptions" >
{{ form.errors.parent_id }} @@ -146,6 +152,21 @@ const form = useForm({
+ + + + + + +