Skip to content

Commit 683d10c

Browse files
committed
add acl to side menu
1 parent 4e67e3c commit 683d10c

File tree

7 files changed

+41
-17
lines changed

7 files changed

+41
-17
lines changed

src/Acl/Services/GetUserPermissions.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@ public function run(int $userId): array
1313
$query->get(['id', 'name']);
1414
}])->findOrFail($userId);
1515

16-
// ray($user->permissions);
17-
1816
//if has direct permissions use it
1917
if ($user->permissions->count()) {
2018
return $this->mapPermissions($user->permissions);

stubs/app/Http/Middleware/HandleInertiaRequests.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use Illuminate\Http\Request;
66
use Inertia\Middleware;
7+
use Modular\Modular\Acl\Services\ListUserPermissions;
78
use Tightenco\Ziggy\Ziggy;
89

910
class HandleInertiaRequests extends Middleware
@@ -32,9 +33,13 @@ public function version(Request $request)
3233
*/
3334
public function share(Request $request)
3435
{
36+
$user = $request->user();
37+
3538
return array_merge(parent::share($request), [
3639
'auth' => [
37-
'user' => $request->user(),
40+
'user' => $user,
41+
'permissions' => $user ? (new ListUserPermissions)->run($user->id) : [],
42+
'isRootUser' => $user ? ($user->hasRole('root') ? true : false) : false,
3843
],
3944
'ziggy' => fn () => array_merge((new Ziggy)->toArray(), [
4045
'location' => $request->url(),

stubs/database/seeders/DatabaseSeeder.php

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22

33
namespace Database\Seeders;
44

5-
// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
65
use Illuminate\Database\Seeder;
76
use Illuminate\Support\Facades\Schema;
87
use Modular\Modular\User\Models\User;
8+
use Spatie\Permission\Models\Role;
99

1010
class DatabaseSeeder extends Seeder
1111
{
@@ -18,14 +18,16 @@ public function run()
1818
{
1919
Schema::disableForeignKeyConstraints();
2020

21-
User::factory()->create([
21+
$testUser = User::factory()->create([
2222
'name' => 'Example User',
2323
'email' => 'user@example.com',
2424
'email_verified_at' => now(),
2525
'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
2626
]);
2727

28-
User::factory(11)->create();
28+
Role::create(['name' => 'root']);
29+
30+
$testUser->assignRole('root');
2931

3032
Schema::enableForeignKeyConstraints();
3133
}

stubs/resources/js/Components/AppMenuItem.vue

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<template>
22
<li class="block">
33
<Link
4-
v-if="menuItem.label && menuItem.link"
4+
v-if="menuItem.label && menuItem.link && can(menuItem.permission)"
55
:href="menuItem.link"
66
class="flex px-2 py-2 text-skin-base-content transition duration-300 ease-in hover:bg-skin-base-300"
77
>
@@ -10,7 +10,7 @@
1010
</Link>
1111

1212
<span
13-
v-if="menuItem.label && !menuItem.link"
13+
v-if="menuItem.label && !menuItem.link && can(menuItem.permission)"
1414
class="mt-3 block px-2 py-2 text-xs uppercase"
1515
>
1616
{{ __(menuItem.label) }}
@@ -21,10 +21,14 @@
2121
</template>
2222

2323
<script setup>
24+
import useAuthCan from '@/Composables/useAuthCan'
25+
2426
const props = defineProps({
2527
menuItem: {
2628
type: Object,
2729
default: () => {}
2830
}
2931
})
32+
33+
const { can } = useAuthCan()
3034
</script>
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { usePage } from '@inertiajs/vue3'
2+
3+
export default function useAuthCan() {
4+
const can = (permission) => {
5+
const auth = usePage().props.auth
6+
7+
if (auth && auth.isRootUser) {
8+
return true
9+
}
10+
11+
return auth && auth.permissions.includes(permission)
12+
}
13+
14+
return { can }
15+
}

tests/AdminAuthTest.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@
77
});
88

99
it('allows authenticated access', function () {
10+
$user = User::factory()->create();
11+
1012
$this->withoutVite();
11-
$this->actingAs(User::factory()->create())->get(route('dashboard.index'))->assertOk();
13+
$this->actingAs($user)->get(route('dashboard.index'))->assertOk();
1214
});
1315

1416
it('can render login page', function () {

tests/Overrides/Http/Middleware/HandleInertiaRequests.php

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
use Illuminate\Http\Request;
66
use Inertia\Middleware;
77

8-
// use Tightenco\Ziggy\Ziggy;
9-
108
class HandleInertiaRequests extends Middleware
119
{
1210
/**
@@ -33,15 +31,15 @@ public function version(Request $request)
3331
*/
3432
public function share(Request $request)
3533
{
34+
$user = $request->user();
35+
3636
return array_merge(parent::share($request), [
3737
'auth' => [
38-
'user' => $request->user(),
38+
'user' => $user,
39+
'permissions' => [],
40+
'isRootUser' => true,
3941
],
40-
// 'ziggy' => function () use ($request) {
41-
// return array_merge((new Ziggy)->toArray(), [
42-
// 'location' => $request->url(),
43-
// ]);
44-
// },
42+
4543
'flash' => fn () => [
4644
'success' => $request->session()->get('success'),
4745
'error' => $request->session()->get('error'),

0 commit comments

Comments
 (0)