Skip to content

Commit cc3da2c

Browse files
committed
admin panel added
1 parent 04a43e4 commit cc3da2c

File tree

10 files changed

+303
-82
lines changed

10 files changed

+303
-82
lines changed
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
3+
namespace App\Http\Controllers\Admin;
4+
5+
use App\Http\Controllers\Controller;
6+
use App\Models\User;
7+
use Illuminate\Http\Request;
8+
9+
class AdminController extends Controller
10+
{
11+
public function index()
12+
{
13+
$count['users'] = User::count();
14+
15+
16+
$count['posts'] = 0;
17+
$count['posts_read'] = 0;
18+
$newPosts = 0;
19+
$topPosts = 0;
20+
21+
return view('admin.index', compact('count'));
22+
}
23+
}

app/Http/Controllers/Admin/PermissionController.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
use App\Http\Requests\UpdatePermissionRequest;
99
use Illuminate\Support\Facades\Gate;
1010
use Spatie\Permission\Models\Permission;
11+
use Symfony\Component\HttpFoundation\Response;
1112

1213
class PermissionController extends Controller
1314
{
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
<?php
2+
3+
namespace App\Http\Controllers\Admin;
4+
5+
use App\Http\Controllers\Controller;
6+
use App\Http\Requests\ChangePasswordRequest;
7+
use App\Http\Requests\UpdateProfileRequest;
8+
use App\Models\User;
9+
use Illuminate\Http\Request;
10+
use Illuminate\Support\Facades\Auth;
11+
use Illuminate\Support\Facades\Hash;
12+
13+
class ProfileController extends Controller
14+
{
15+
public function index()
16+
{
17+
$profile = Auth::user();
18+
19+
return view('admin.profile.edit', compact('profile'));
20+
}
21+
22+
public function update(UpdateProfileRequest $request)
23+
{
24+
$user = User::findOrFail(auth()->id());
25+
$user->name = $request->name;
26+
$user->email = $request->email;
27+
28+
if ($user->save()) {
29+
return redirect()->back()->with('message', 'Profile updated successfully!');
30+
}
31+
return redirect()->back()->with('error', 'Profile update fail!');
32+
}
33+
34+
public function password()
35+
{
36+
return view('admin.profile.change-password');
37+
}
38+
39+
public function updatePassword(ChangePasswordRequest $request)
40+
{
41+
#Match The Old Password
42+
if (!Hash::check($request->old_password, auth()->user()->password)) {
43+
return back()->with("error", "Old Password Doesn't match!");
44+
}
45+
46+
#Update the new Password
47+
$updated = User::whereId(auth()->user()->id)->update([
48+
'password' => Hash::make($request->new_password)
49+
]);
50+
51+
if ($updated) {
52+
return redirect()->back()->with('message', 'Password changed successfully!');
53+
} else {
54+
return redirect()->back()->with('error', 'Profile change fail!');
55+
}
56+
}
57+
}
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
<?php
2+
3+
namespace App\Http\Controllers\Admin;
4+
5+
use App\Http\Controllers\Controller;
6+
use App\Http\Requests\StoreRoleRequest;
7+
use App\Http\Requests\UpdateRoleRequest;
8+
use Illuminate\Support\Facades\Gate;
9+
use Spatie\Permission\Models\Permission;
10+
use Spatie\Permission\Models\Role;
11+
use Symfony\Component\HttpFoundation\Response;
12+
13+
class RoleController extends Controller
14+
{
15+
public function index()
16+
{
17+
abort_if(Gate::denies('role_access'), Response::HTTP_FORBIDDEN, '403 Forbidden');
18+
19+
$roles = Role::paginate(15);
20+
21+
return view('admin.roles.index', compact('roles'));
22+
}
23+
24+
public function create()
25+
{
26+
abort_if(Gate::denies('role_create'), Response::HTTP_FORBIDDEN, '403 Forbidden');
27+
28+
$permissions = Permission::all()->pluck('name', 'id');
29+
30+
return view('admin.roles.create', compact('permissions'));
31+
}
32+
33+
public function store(StoreRoleRequest $request)
34+
{
35+
$role = Role::create(['name' => $request->name]);
36+
$role->permissions()->sync($request->input('permissions', []));
37+
38+
return redirect()->route('admin.roles.index')->with('message', 'Role save successfully.');
39+
}
40+
41+
public function edit(Role $role)
42+
{
43+
abort_if(Gate::denies('role_edit'), Response::HTTP_FORBIDDEN, '403 Forbidden');
44+
45+
$permissions = Permission::all()->pluck('name', 'id');
46+
47+
$role->load('permissions');
48+
49+
return view('admin.roles.edit', compact('permissions', 'role'));
50+
}
51+
52+
public function update(UpdateRoleRequest $request, Role $role)
53+
{
54+
$role->update(['name' => $request->name]);
55+
$role->permissions()->sync($request->input('permissions', []));
56+
57+
return redirect()->route('admin.roles.index')->with('message', 'Role updated successfully.');
58+
}
59+
60+
public function show(Role $role)
61+
{
62+
abort_if(Gate::denies('role_show'), Response::HTTP_FORBIDDEN, '403 Forbidden');
63+
64+
$role->load('permissions');
65+
66+
return view('admin.roles.show', compact('role'));
67+
}
68+
69+
public function destroy(Role $role)
70+
{
71+
abort_if(Gate::denies('role_delete'), Response::HTTP_FORBIDDEN, '403 Forbidden');
72+
73+
$role->delete();
74+
75+
return back();
76+
}
77+
}
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
<?php
2+
3+
namespace App\Http\Controllers\Admin;
4+
5+
use App\Http\Controllers\Controller;
6+
use App\Models\User;
7+
use Illuminate\Http\Request;
8+
use Illuminate\Support\Facades\Gate;
9+
use Symfony\Component\HttpFoundation\Response;
10+
11+
class UserController extends Controller
12+
{
13+
/**
14+
* Display a listing of the resource.
15+
*
16+
* @return \Illuminate\Http\Response
17+
*/
18+
public function index()
19+
{
20+
$users = User::latest()->paginate(15);
21+
22+
return view('admin.users.index', compact('users'));
23+
}
24+
25+
/**
26+
* Show the form for creating a new resource.
27+
*
28+
* @return \Illuminate\Http\Response
29+
*/
30+
public function create()
31+
{
32+
//
33+
}
34+
35+
/**
36+
* Store a newly created resource in storage.
37+
*
38+
* @param \Illuminate\Http\Request $request
39+
* @return \Illuminate\Http\Response
40+
*/
41+
public function store(Request $request)
42+
{
43+
//
44+
}
45+
46+
/**
47+
* Display the specified resource.
48+
*
49+
* @param int $id
50+
* @return \Illuminate\Http\Response
51+
*/
52+
public function show($id)
53+
{
54+
//
55+
}
56+
57+
/**
58+
* Show the form for editing the specified resource.
59+
*
60+
* @param int $id
61+
* @return \Illuminate\Http\Response
62+
*/
63+
public function edit($id)
64+
{
65+
//
66+
}
67+
68+
/**
69+
* Update the specified resource in storage.
70+
*
71+
* @param \Illuminate\Http\Request $request
72+
* @param int $id
73+
* @return \Illuminate\Http\Response
74+
*/
75+
public function update(Request $request, $id)
76+
{
77+
//
78+
}
79+
80+
/**
81+
* Remove the specified resource from storage.
82+
*
83+
* @param int $id
84+
* @return \Illuminate\Http\Response
85+
*/
86+
public function destroy($id)
87+
{
88+
//
89+
}
90+
91+
public function banUnban($id, $status)
92+
{
93+
if (auth()->user()->hasRole('Admin')){
94+
$user = User::findOrFail($id);
95+
$user->status = $status;
96+
if ($user->save()){
97+
return redirect()->back()->with('message', 'User status updated successfully!');
98+
}
99+
return redirect()->back()->with('error', 'User status update fail!');
100+
}
101+
return redirect(Response::HTTP_FORBIDDEN, '403 Forbidden');
102+
}
103+
}

app/Providers/RouteServiceProvider.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class RouteServiceProvider extends ServiceProvider
1717
*
1818
* @var string
1919
*/
20-
public const HOME = '/home';
20+
public const HOME = '/admin';
2121

2222
/**
2323
* Define your route model bindings, pattern filters, and other route configuration.
@@ -35,6 +35,9 @@ public function boot(): void
3535

3636
Route::middleware('web')
3737
->group(base_path('routes/web.php'));
38+
39+
Route::middleware('web')
40+
->group(base_path('routes/admin.php'));
3841
});
3942
}
4043
}
30.6 KB
Loading

public/images/placeholder-post.png

4.71 KB
Loading

resources/views/admin/index.blade.php

Lines changed: 1 addition & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -157,85 +157,5 @@ class="feather feather-bar-chart-2 align-middle text-primary">
157157
</div>
158158
@endif
159159
</div>
160-
161-
<div class="row">
162-
<div class="col-md-6">
163-
<div class="card">
164-
<div class="card-header">
165-
<h6 class="card-title float-start">Latest 5 Posts</h6>
166-
</div>
167-
<div class="card-body">
168-
<div class="table-responsive">
169-
<table class="table">
170-
<thead>
171-
<tr>
172-
<th>Title</th>
173-
<th>Thumbnail</th>
174-
<th>Category</th>
175-
<th>Description</th>
176-
<th>By</th>
177-
<th>Reads</th>
178-
<th>Created At</th>
179-
</tr>
180-
</thead>
181-
<tbody>
182-
@foreach($newPosts as $post)
183-
<tr>
184-
<td>{{ $post->title }}</td>
185-
<td><img
186-
src="{{ $post->thumbnail ? asset('uploads/posts/'.$post->thumbnail) : asset('images/placeholder-post.png') }}"
187-
style="width: 50px; height: 50px"></td>
188-
<td>{{ $post->category->title }}</td>
189-
<td>{{ Str::limit(strip_tags($post->body), 30) }}</td>
190-
<td>{{ optional($post->user)->name }}</td>
191-
<td>{{ $post->read_count }}</td>
192-
<td>{{ $post->created_at->diffForHumans() }}</td>
193-
</tr>
194-
@endforeach
195-
</tbody>
196-
</table>
197-
</div>
198-
</div>
199-
</div>
200-
</div>
201-
<div class="col-md-6">
202-
<div class="card">
203-
<div class="card-header">
204-
<h6 class="card-title float-start">Top 5 Posts</h6>
205-
</div>
206-
<div class="card-body">
207-
<div class="table-responsive">
208-
<table class="table">
209-
<thead>
210-
<tr>
211-
<th>Title</th>
212-
<th>Thumbnail</th>
213-
<th>Category</th>
214-
<th>Description</th>
215-
<th>By</th>
216-
<th>Reads</th>
217-
<th>Created At</th>
218-
</tr>
219-
</thead>
220-
<tbody>
221-
@foreach($topPosts as $post)
222-
<tr>
223-
<td>{{ $post->title }}</td>
224-
<td><img
225-
src="{{ $post->thumbnail ? asset('uploads/posts/'.$post->thumbnail) : asset('images/placeholder-post.png') }}"
226-
style="width: 50px; height: 50px"></td>
227-
<td>{{ $post->category->title }}</td>
228-
<td>{{ Str::limit(strip_tags($post->body), 30) }}</td>
229-
<td>{{ optional($post->user)->name }}</td>
230-
<td>{{ $post->read_count }}</td>
231-
<td>{{ $post->created_at->diffForHumans() }}</td>
232-
</tr>
233-
@endforeach
234-
</tbody>
235-
</table>
236-
</div>
237-
</div>
238-
</div>
239-
</div>
240-
</div>
160+
241161
@endsection

0 commit comments

Comments
 (0)