Skip to content

Commit 4fb8435

Browse files
committed
Added permission CRUD
1 parent c5b524f commit 4fb8435

19 files changed

+898
-3
lines changed
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
<?php
2+
3+
namespace App\Http\Controllers\Admin;
4+
5+
use App\Http\Controllers\Controller;
6+
use App\Http\Requests\Admin\StorePermissionRequest;
7+
use App\Http\Requests\Admin\UpdatePermissionRequest;
8+
use App\Models\Permission;
9+
use Illuminate\Http\Request;
10+
use Inertia\Inertia;
11+
12+
class PermissionController extends Controller
13+
{
14+
function __construct()
15+
{
16+
$this->middleware('can:permission list', ['only' => ['index','show']]);
17+
$this->middleware('can:permission create', ['only' => ['create','store']]);
18+
$this->middleware('can:permission edit', ['only' => ['edit','update']]);
19+
$this->middleware('can:permission delete', ['only' => ['destroy']]);
20+
}
21+
/**
22+
* Display a listing of the resource.
23+
*
24+
* @return \Illuminate\Http\Response
25+
*/
26+
public function index()
27+
{
28+
$permissions = (new Permission)->newQuery();
29+
30+
if (request()->has('search')) {
31+
$permissions->where('name', 'Like', '%' . request()->input('search') . '%');
32+
}
33+
34+
if (request()->query('sort')) {
35+
$attribute = request()->query('sort');
36+
$sort_order = 'ASC';
37+
if (strncmp($attribute, '-', 1) === 0) {
38+
$sort_order = 'DESC';
39+
$attribute = substr($attribute, 1);
40+
}
41+
$permissions->orderBy($attribute, $sort_order);
42+
} else {
43+
$permissions->latest();
44+
}
45+
46+
$permissions = $permissions->paginate(5)->onEachSide(2);
47+
48+
return Inertia::render('Admin/Permission/Index', [
49+
'permissions' => $permissions,
50+
]);
51+
}
52+
53+
/**
54+
* Show the form for creating a new resource.
55+
*
56+
* @return \Illuminate\Http\Response
57+
*/
58+
public function create()
59+
{
60+
return view('admin.permission.create');
61+
}
62+
63+
/**
64+
* Store a newly created resource in storage.
65+
*
66+
* @param \App\Http\Requests\Admin\StorePermissionRequest $request
67+
* @return \Illuminate\Http\Response
68+
*/
69+
public function store(StorePermissionRequest $request)
70+
{
71+
Permission::create($request->all());
72+
73+
return redirect()->route('permission.index')
74+
->with('message', __('Permission created successfully.'));
75+
}
76+
77+
/**
78+
* Display the specified resource.
79+
*
80+
* @param \App\Models\Permission $permission
81+
* @return \Illuminate\Http\Response
82+
*/
83+
public function show(Permission $permission)
84+
{
85+
return view('admin.permission.show',compact('permission'));
86+
}
87+
88+
/**
89+
* Show the form for editing the specified resource.
90+
*
91+
* @param \App\Models\Permission $permission
92+
* @return \Illuminate\Http\Response
93+
*/
94+
public function edit(Permission $permission)
95+
{
96+
return view('admin.permission.edit',compact('permission'));
97+
}
98+
99+
/**
100+
* Update the specified resource in storage.
101+
*
102+
* @param \App\Http\Requests\Admin\UpdatePermissionRequest $request
103+
* @param \App\Models\Permission $permission
104+
* @return \Illuminate\Http\Response
105+
*/
106+
public function update(UpdatePermissionRequest $request, Permission $permission)
107+
{
108+
$permission->update($request->all());
109+
110+
return redirect()->route('permission.index')
111+
->with('message', __('Permission updated successfully.'));
112+
}
113+
114+
/**
115+
* Remove the specified resource from storage.
116+
*
117+
* @param \App\Models\Permission $permission
118+
* @return \Illuminate\Http\Response
119+
*/
120+
public function destroy(Permission $permission)
121+
{
122+
$permission->delete();
123+
124+
return redirect()->route('permission.index')
125+
->with('message', __('Permission deleted successfully'));
126+
}
127+
}
Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
<?php
2+
3+
namespace App\Http\Controllers\Admin;
4+
5+
use App\Http\Controllers\Controller;
6+
use App\Http\Requests\Admin\StoreRoleRequest;
7+
use App\Http\Requests\Admin\UpdateRoleRequest;
8+
use App\Models\Role;
9+
use App\Models\Permission;
10+
use Illuminate\Http\Request;
11+
12+
class RoleController extends Controller
13+
{
14+
function __construct()
15+
{
16+
$this->middleware('can:role list', ['only' => ['index','show']]);
17+
$this->middleware('can:role create', ['only' => ['create','store']]);
18+
$this->middleware('can:role edit', ['only' => ['edit','update']]);
19+
$this->middleware('can:role delete', ['only' => ['destroy']]);
20+
}
21+
/**
22+
* Display a listing of the resource.
23+
*
24+
* @return \Illuminate\Http\Response
25+
*/
26+
public function index()
27+
{
28+
$roles = (new Role)->newQuery();
29+
30+
if (request()->has('search')) {
31+
$roles->where('name', 'Like', '%' . request()->input('search') . '%');
32+
}
33+
34+
if (request()->query('sort')) {
35+
$attribute = request()->query('sort');
36+
$sort_order = 'ASC';
37+
if (strncmp($attribute, '-', 1) === 0) {
38+
$sort_order = 'DESC';
39+
$attribute = substr($attribute, 1);
40+
}
41+
$roles->orderBy($attribute, $sort_order);
42+
} else {
43+
$roles->latest();
44+
}
45+
46+
$roles = $roles->paginate(5);
47+
48+
return view('admin.role.index',compact('roles'))
49+
->with('i', (request()->input('page', 1) - 1) * 5);
50+
}
51+
52+
/**
53+
* Show the form for creating a new resource.
54+
*
55+
* @return \Illuminate\Http\Response
56+
*/
57+
public function create()
58+
{
59+
$permissions = Permission::all();
60+
return view('admin.role.create', compact('permissions'));
61+
}
62+
63+
/**
64+
* Store a newly created resource in storage.
65+
*
66+
* @param \App\Http\Requests\Admin\StoreRoleRequest $request
67+
* @return \Illuminate\Http\Response
68+
*/
69+
public function store(StoreRoleRequest $request)
70+
{
71+
$role = Role::create($request->all());
72+
73+
if(! empty($request->permissions)) {
74+
$role->givePermissionTo($request->permissions);
75+
}
76+
77+
return redirect()->route('role.index')
78+
->with('message','Role created successfully.');
79+
}
80+
81+
/**
82+
* Display the specified resource.
83+
*
84+
* @param \App\Models\Role $role
85+
* @return \Illuminate\Http\Response
86+
*/
87+
public function show(Role $role)
88+
{
89+
$permissions = Permission::all();
90+
$roleHasPermissions = array_column(json_decode($role->permissions, true), 'id');
91+
return view('admin.role.show', compact('role', 'permissions', 'roleHasPermissions'));
92+
}
93+
94+
/**
95+
* Show the form for editing the specified resource.
96+
*
97+
* @param \App\Models\Role $role
98+
* @return \Illuminate\Http\Response
99+
*/
100+
public function edit(Role $role)
101+
{
102+
$permissions = Permission::all();
103+
$roleHasPermissions = array_column(json_decode($role->permissions, true), 'id');
104+
105+
return view('admin.role.edit', compact('role', 'permissions', 'roleHasPermissions'));
106+
}
107+
108+
/**
109+
* Update the specified resource in storage.
110+
*
111+
* @param \App\Http\Requests\Admin\UpdateRoleRequest $request
112+
* @param \App\Models\Role $role
113+
* @return \Illuminate\Http\Response
114+
*/
115+
public function update(UpdateRoleRequest $request, Role $role)
116+
{
117+
$role->update($request->all());
118+
$permissions = $request->permissions ?? [];
119+
$role->syncPermissions($permissions);
120+
121+
return redirect()->route('role.index')
122+
->with('message','Role updated successfully.');
123+
}
124+
125+
/**
126+
* Remove the specified resource from storage.
127+
*
128+
* @param \App\Models\Role $role
129+
* @return \Illuminate\Http\Response
130+
*/
131+
public function destroy(Role $role)
132+
{
133+
$role->delete();
134+
135+
return redirect()->route('role.index')
136+
->with('message', __('Role deleted successfully'));
137+
}
138+
}

0 commit comments

Comments
 (0)