Skip to content

Commit 2c35b13

Browse files
committed
Added role & user CRUD
1 parent 12be733 commit 2c35b13

File tree

18 files changed

+1166
-52
lines changed

18 files changed

+1166
-52
lines changed

app/Http/Controllers/Admin/RoleController.php

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
use App\Http\Requests\Admin\UpdateRoleRequest;
88
use App\Models\Permission;
99
use App\Models\Role;
10+
use Illuminate\Support\Facades\Auth;
11+
use Inertia\Inertia;
1012

1113
class RoleController extends Controller
1214
{
@@ -43,10 +45,17 @@ public function index()
4345
$roles->latest();
4446
}
4547

46-
$roles = $roles->paginate(5);
47-
48-
return view('admin.role.index', compact('roles'))
49-
->with('i', (request()->input('page', 1) - 1) * 5);
48+
$roles = $roles->paginate(5)->onEachSide(2)->appends(request()->query());
49+
50+
return Inertia::render('Admin/Role/Index', [
51+
'roles' => $roles,
52+
'filters' => request()->all('search'),
53+
'can' => [
54+
'create' => Auth::user()->can('role create'),
55+
'edit' => Auth::user()->can('role edit'),
56+
'delete' => Auth::user()->can('role delete'),
57+
]
58+
]);
5059
}
5160

5261
/**
@@ -56,9 +65,11 @@ public function index()
5665
*/
5766
public function create()
5867
{
59-
$permissions = Permission::all();
68+
$permissions = Permission::all()->pluck("name","id");
6069

61-
return view('admin.role.create', compact('permissions'));
70+
return Inertia::render('Admin/Role/Create', [
71+
'permissions' => $permissions,
72+
]);
6273
}
6374

6475
/**
@@ -87,10 +98,14 @@ public function store(StoreRoleRequest $request)
8798
*/
8899
public function show(Role $role)
89100
{
90-
$permissions = Permission::all();
101+
$permissions = Permission::all()->pluck("name","id");
91102
$roleHasPermissions = array_column(json_decode($role->permissions, true), 'id');
92103

93-
return view('admin.role.show', compact('role', 'permissions', 'roleHasPermissions'));
104+
return Inertia::render('Admin/Role/Show', [
105+
'role' => $role,
106+
'permissions' => $permissions,
107+
'roleHasPermissions' => $roleHasPermissions,
108+
]);
94109
}
95110

96111
/**
@@ -101,10 +116,14 @@ public function show(Role $role)
101116
*/
102117
public function edit(Role $role)
103118
{
104-
$permissions = Permission::all();
119+
$permissions = Permission::all()->pluck("name","id");
105120
$roleHasPermissions = array_column(json_decode($role->permissions, true), 'id');
106121

107-
return view('admin.role.edit', compact('role', 'permissions', 'roleHasPermissions'));
122+
return Inertia::render('Admin/Role/Edit', [
123+
'role' => $role,
124+
'permissions' => $permissions,
125+
'roleHasPermissions' => $roleHasPermissions,
126+
]);
108127
}
109128

110129
/**

app/Http/Controllers/Admin/UserController.php

Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
use Illuminate\Http\Request;
1313
use Illuminate\Support\Facades\Hash;
1414
use Illuminate\Validation\Rules;
15+
use Illuminate\Support\Facades\Auth;
16+
use Inertia\Inertia;
1517

1618
class UserController extends Controller
1719
{
@@ -48,10 +50,17 @@ public function index()
4850
$users->latest();
4951
}
5052

51-
$users = $users->paginate(5);
53+
$users = $users->paginate(5)->onEachSide(2)->appends(request()->query());
5254

53-
return view('admin.user.index', compact('users'))
54-
->with('i', (request()->input('page', 1) - 1) * 5);
55+
return Inertia::render('Admin/User/Index', [
56+
'users' => $users,
57+
'filters' => request()->all('search'),
58+
'can' => [
59+
'create' => Auth::user()->can('user create'),
60+
'edit' => Auth::user()->can('user edit'),
61+
'delete' => Auth::user()->can('user delete'),
62+
]
63+
]);
5564
}
5665

5766
/**
@@ -61,9 +70,11 @@ public function index()
6170
*/
6271
public function create()
6372
{
64-
$roles = Role::all();
73+
$roles = Role::all()->pluck("name","id");
6574

66-
return view('admin.user.create', compact('roles'));
75+
return Inertia::render('Admin/User/Create', [
76+
'roles' => $roles,
77+
]);
6778
}
6879

6980
/**
@@ -89,10 +100,14 @@ public function store(StoreUserRequest $request, CreateUser $createUser)
89100
*/
90101
public function show(User $user)
91102
{
92-
$roles = Role::all();
103+
$roles = Role::all()->pluck("name","id");
93104
$userHasRoles = array_column(json_decode($user->roles, true), 'id');
94105

95-
return view('admin.user.show', compact('user', 'roles', 'userHasRoles'));
106+
return Inertia::render('Admin/User/Show', [
107+
'user' => $user,
108+
'roles' => $roles,
109+
'userHasRoles' => $userHasRoles,
110+
]);
96111
}
97112

98113
/**
@@ -103,10 +118,14 @@ public function show(User $user)
103118
*/
104119
public function edit(User $user)
105120
{
106-
$roles = Role::all();
121+
$roles = Role::all()->pluck("name","id");
107122
$userHasRoles = array_column(json_decode($user->roles, true), 'id');
108123

109-
return view('admin.user.edit', compact('user', 'roles', 'userHasRoles'));
124+
return Inertia::render('Admin/User/Edit', [
125+
'user' => $user,
126+
'roles' => $roles,
127+
'userHasRoles' => $userHasRoles,
128+
]);
110129
}
111130

112131
/**
@@ -146,7 +165,9 @@ public function accountInfo()
146165
{
147166
$user = \Auth::user();
148167

149-
return view('admin.user.account_info', compact('user'));
168+
return Inertia::render('Admin/User/AccountInfo', [
169+
'user' => $user,
170+
]);
150171
}
151172

152173
/**
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
<script setup>
2+
import { computed } from 'vue'
3+
const props = defineProps({
4+
name: {
5+
type: String,
6+
required: true
7+
},
8+
type: {
9+
type: String,
10+
default: 'checkbox',
11+
validator: value => ['checkbox', 'radio', 'switch'].includes(value)
12+
},
13+
label: {
14+
type: String,
15+
default: null
16+
},
17+
modelValue: {
18+
type: [Array, String, Number, Boolean],
19+
default: null
20+
},
21+
inputValue: {
22+
type: [String, Number, Boolean],
23+
required: true
24+
}
25+
})
26+
const emit = defineEmits(['update:modelValue'])
27+
const computedValue = computed({
28+
get: () => props.modelValue,
29+
set: value => {
30+
emit('update:modelValue', value)
31+
}
32+
})
33+
const inputType = computed(() => props.type === 'radio' ? 'radio' : 'checkbox')
34+
</script>
35+
36+
<template>
37+
<label
38+
:class="type"
39+
class="mr-6 mb-3 last:mr-0"
40+
>
41+
<input
42+
v-model="computedValue"
43+
:type="inputType"
44+
:name="name"
45+
:value="inputValue"
46+
>
47+
<span class="check" />
48+
<span class="pl-2">{{ label }}</span>
49+
</label>
50+
</template>
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<script setup>
22
import { computed } from 'vue'
3-
3+
import FormCheckRadio from '@/Components/FormCheckRadio.vue'
44
const props = defineProps({
55
options: {
66
type: Object,
@@ -12,46 +12,42 @@ const props = defineProps({
1212
},
1313
type: {
1414
type: String,
15-
default: 'checkbox'
15+
default: 'checkbox',
16+
validator: value => ['checkbox', 'radio', 'switch'].includes(value)
17+
},
18+
componentClass: {
19+
type: String,
20+
default: null
1621
},
17-
column: Boolean,
22+
isColumn: Boolean,
1823
modelValue: {
19-
type: [Object, Array, String, Number],
24+
type: [Array, String, Number, Boolean],
2025
default: null
2126
}
2227
})
23-
2428
const emit = defineEmits(['update:modelValue'])
25-
2629
const computedValue = computed({
2730
get: () => props.modelValue,
2831
set: value => {
2932
emit('update:modelValue', value)
3033
}
3134
})
32-
33-
const inputType = computed(() => props.type === 'radio' ? 'radio' : 'checkbox')
3435
</script>
3536

3637
<template>
3738
<div
3839
class="flex justify-start flex-wrap -mb-3"
39-
:class="{'flex-col':column}"
40+
:class="{ 'flex-col': isColumn }"
4041
>
41-
<label
42+
<FormCheckRadio
4243
v-for="(value, key) in options"
4344
:key="key"
44-
:class="type"
45-
class="mr-6 mb-3 last:mr-0"
46-
>
47-
<input
48-
v-model="computedValue"
49-
:type="inputType"
50-
:name="name"
51-
:value="key"
52-
>
53-
<span class="check" />
54-
<span class="control-label">{{ value }}</span>
55-
</label>
45+
v-model="computedValue"
46+
:type="type"
47+
:name="name"
48+
:input-value="key"
49+
:label="value"
50+
:class="componentClass"
51+
/>
5652
</div>
57-
</template>
53+
</template>

resources/js/Components/FormControl.vue

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,10 @@ const props = defineProps({
4444
borderless: Boolean,
4545
transparent: Boolean,
4646
ctrlKFocus: Boolean,
47-
error: Boolean
47+
error: {
48+
type: String,
49+
default: null
50+
}
4851
})
4952
5053
const emit = defineEmits(['update:modelValue', 'setRef'])

resources/js/Components/UserCard.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { mdiCheckDecagram } from '@mdi/js'
55
import BaseLevel from '@/Components/BaseLevel.vue'
66
import UserAvatarCurrentUser from '@/Components/UserAvatarCurrentUser.vue'
77
import CardBox from '@/Components/CardBox.vue'
8-
import FormCheckRadioPicker from '@/Components/FormCheckRadioPicker.vue'
8+
import FormCheckRadioGroup from '@/Components/FormCheckRadioGroup.vue'
99
import PillTag from '@/Components/PillTag.vue'
1010
1111
const mainStore = useMainStore()
@@ -21,7 +21,7 @@ const userSwitchVal = ref([])
2121
<UserAvatarCurrentUser class="lg:mx-12" />
2222
<div class="space-y-3 text-center md:text-left lg:mx-12">
2323
<div class="flex justify-center md:block">
24-
<FormCheckRadioPicker
24+
<FormCheckRadioGroup
2525
v-model="userSwitchVal"
2626
name="sample-switch"
2727
type="switch"

resources/js/Pages/Admin/Permission/Create.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ const form = useForm({
4747
<FormControl
4848
v-model="form.name"
4949
type="text"
50-
placeholder="Name"
50+
placeholder="Enter Name"
5151
:error="form.errors.name"
5252
>
5353
<div class="text-red-400 text-sm" v-if="form.errors.name">

resources/js/Pages/Admin/Permission/Edit.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ const form = useForm({
5555
<FormControl
5656
v-model="form.name"
5757
type="text"
58-
placeholder="Name"
58+
placeholder="Enter Name"
5959
:error="form.errors.name"
6060
>
6161
<div class="text-red-400 text-sm" v-if="form.errors.name">

0 commit comments

Comments
 (0)