Skip to content

Commit 2816337

Browse files
committed
fix: Update CheckPermission middleware to allow admin access to all routes
- Fixed issue where admin users were unable to access routes designated for users. - Updated middleware logic to ensure admin users have access to all routes regardless of role. - Ensured user access is restricted based on their assigned role. - Redirect user to 'index' with an error message if they attempt to access restricted routes.
1 parent cb1fab1 commit 2816337

File tree

7 files changed

+97
-87
lines changed

7 files changed

+97
-87
lines changed

app/Http/Controllers/AuthController.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public function login(Request $request)
5050
// Đăng nhập admin
5151
Auth::login($admin);
5252
// Chuyển hướng tới trang danh sách Khoa với thông báo thành công
53-
return redirect()->route('khoa.index')->with('success', 'Đăng nhập thành công');
53+
return redirect()->route('dashboard')->with('success', 'Đăng nhập thành công');
5454
}
5555

5656
// Nếu thông tin đăng nhập không đúng, quay lại trang trước và hiển thị lỗi

app/Http/Middleware/CheckPermission.php

+18-13
Original file line numberDiff line numberDiff line change
@@ -38,24 +38,29 @@ class CheckPermission
3838
*/
3939
public function handle($request, Closure $next, $role = 'admin')
4040
{
41-
// Lấy người dùng hiện tại từ hệ thống xác thực
41+
// Kiểm tra nếu người dùng đã đăng nhập
42+
if (!Auth::check()) {
43+
return redirect()->route('login');
44+
}
45+
4246
$user = Auth::user();
4347

4448
if ($user) {
45-
// Nếu vai trò yêu cầu là 'admin'
46-
if ($role == 'admin') {
47-
// Nếu người dùng là admin, cho phép truy cập tất cả
48-
return $next($request);
49-
}
50-
51-
// Nếu vai trò yêu cầu là 'user' và người dùng không có quyền (phanQuyen)
52-
if ($role == 'user' && !$user->phanQuyen) {
53-
// Chuyển hướng người dùng về trang 'khoa.index' với thông báo lỗi
54-
return redirect()->route('khoa.index')->withErrors(['error' => 'Bạn không có quyền truy cập chức năng này']);
49+
// Kiểm tra quyền truy cập nếu yêu cầu là 'admin'
50+
if ($role === 'admin') {
51+
if ($user->phanQuyen) {
52+
return $next($request);
53+
} else {
54+
return redirect()->route('dashboard')->withErrors(['error' => 'Admin access denied.']);
55+
}
5556
}
57+
58+
// Kiểm tra quyền truy cập nếu yêu cầu là 'user'
59+
if ($role === 'user') {
60+
return $next($request);
61+
}
5662
}
5763

58-
// Nếu không có người dùng hoặc vai trò không khớp, tiếp tục xử lý yêu cầu
59-
return $next($request);
64+
return redirect()->route('dashboard')->withErrors(['error' => 'Access denied.']);
6065
}
6166
}

app/Models/Admin.php

+6-4
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,6 @@ class Admin extends Authenticatable
3333
// Đặt tên bảng tương ứng với mô hình này trong cơ sở dữ liệu
3434
protected $table = 'tb_Admin';
3535

36-
// Đặt khóa chính của bảng là 'taiKhoan'
37-
protected $primaryKey = 'taiKhoan';
38-
3936
// Các thuộc tính có thể được gán giá trị thông qua mass assignment
4037
protected $fillable = [
4138
'taiKhoan',
@@ -45,7 +42,7 @@ class Admin extends Authenticatable
4542

4643
// Các thuộc tính sẽ bị ẩn khi chuyển đổi thành mảng hoặc JSON
4744
protected $hidden = [
48-
'matKhau', 'created_at', 'updated_at'
45+
'matKhau', 'created_at', 'updated_at',
4946
];
5047

5148
// Hàm này sẽ được gọi khi thuộc tính 'matKhau' được gán giá trị
@@ -54,4 +51,9 @@ public function setPasswordAttribute($value)
5451
// Mã hóa mật khẩu trước khi lưu vào cơ sở dữ liệu
5552
$this->attributes['matKhau'] = bcrypt($value);
5653
}
54+
55+
public function getPhanQuyenHienThiAttribute()
56+
{
57+
return $this->phanQuyen ? 'Admin' : 'Nhân viên';
58+
}
5759
}

database/migrations/2024_08_12_030903_create_tb_admin_table.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public function up(): void
1515
$table->id(); // Tự động tăng id
1616
$table->string('taiKhoan')->unique();
1717
$table->string('matKhau');
18-
$table->boolean('phanQuyen')->default(false);
18+
$table->tinyInteger('phanQuyen')->default(0); // đã thử boolean không hoạt động tốt
1919
$table->timestamps();
2020
});
2121
}

resources/views/layouts/header.blade.php

+6-9
Original file line numberDiff line numberDiff line change
@@ -33,28 +33,25 @@
3333
<li><a class="dropdown-item" href="{{ route('nganh.create') }}">Thêm Ngành</a></li>
3434
</ul>
3535
</li>
36-
<!-- Thêm các menu khác tại đây -->
3736
</ul>
3837
<ul class="navbar-nav">
3938
@auth
4039
<li class="nav-item dropdown">
4140
<a class="nav-link dropdown-toggle" href="#" id="userDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
42-
<i class="bi bi-person-circle"></i> {{ Auth::user()->name }}
41+
<i class="bi bi-person-circle"></i> {{ Auth::user()->taiKhoan }}
4342
</a>
4443
<ul class="dropdown-menu dropdown-menu-end" aria-labelledby="userDropdown">
45-
<li><a class="dropdown-item" href="#">Profile</a></li>
46-
<li><a class="dropdown-item" href="{{ route('logout') }}">Logout</a></li>
44+
<li><a class="dropdown-item" href="#">Quyền: {{ Auth::user()->phanQuyenHienThi }}</a></li>
45+
<li><a class="dropdown-item" href="{{ route('logout') }}">Đăng xuất</a></li>
4746
</ul>
4847
</li>
4948
@else
5049
<li class="nav-item">
51-
<a class="nav-link" href="{{ route('login') }}"><i class="bi bi-box-arrow-in-right"></i> Login</a>
52-
</li>
50+
<a class="nav-link" href="{{ route('login') }}"><i class="bi bi-box-arrow-in-right"></i> Login</a></li>
5351
<li class="nav-item">
54-
<a class="nav-link" href="{{ route('register') }}"><i class="bi bi-person-plus-fill"></i> Register</a>
55-
</li>
52+
<a class="nav-link" href="{{ route('register') }}"><i class="bi bi-person-plus-fill"></i> Register</a></li>
5653
@endauth
57-
</ul>
54+
</ul>
5855
</div>
5956
</div>
6057
</nav>

routes/api.php

+2-12
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
<?php
22
use Illuminate\Support\Facades\Route;
3-
use App\Http\Middleware\CheckPermission;
3+
44
use App\Http\Middleware\ApiAuthenticate;
5+
56
use App\Http\Controllers\KhoaController;
67
use App\Http\Controllers\NganhController;
78
use App\Http\Controllers\LopController;
@@ -49,17 +50,6 @@
4950
});
5051
});
5152

52-
// đăng nhập mới đc truy cập
53-
//Route::middleware('auth')->group(function () {
54-
// có quyền admin mới được truy cập
55-
// Route::middleware([CheckPermission::class . ':admin'])->group(function () {
56-
//});
57-
// có quyền user là được truy cập
58-
//Route::middleware([CheckPermission::class . ':user'])->group(function () {
59-
//});
60-
//});
61-
62-
6353
// Nghành
6454
Route::get('/nganh', [NganhController::class, 'apiIndex']);
6555
Route::get('/nganh/{id}', [NganhController::class, 'apiShow']);

routes/web.php

+63-47
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
<?php
22

33
use Illuminate\Support\Facades\Route;
4-
use App\Http\Controllers\AuthController;
4+
55
use App\Http\Middleware\CheckPermission;
6+
7+
use App\Http\Controllers\AuthController;
68
use App\Http\Controllers\KhoaController;
79
use App\Http\Controllers\NganhController;
810
use App\Http\Controllers\LopController;
@@ -19,11 +21,7 @@
1921

2022
Route::get('/', function () {
2123
return view('index');
22-
});
23-
24-
Route::get('/dashboard', function () {
25-
return view('dashboard.index');
26-
});
24+
})->name('index');;
2725

2826
// admin login
2927
Route::get('login', [AuthController::class, 'showLoginForm'])->name('login');
@@ -32,55 +30,73 @@
3230
Route::post('register', [AuthController::class, 'register']);
3331
Route::get('logout', [AuthController::class, 'logout'])->name('logout');
3432

35-
// Khoa
36-
Route::get('/khoa', [KhoaController::class, 'index'])->name('khoa.index');
33+
//Route::middleware('auth')->group(function () {
34+
// có quyền admin mới được truy cập
35+
// Route::middleware([CheckPermission::class . ':admin'])->group(function () {
36+
//});
37+
//Route::middleware([CheckPermission::class . ':user'])->group(function () {
38+
//});
39+
//});
40+
41+
42+
Route::middleware('auth')->group(function () {
43+
// Route yêu cầu người dùng có quyền là 'user'
44+
Route::middleware([CheckPermission::class . ':user'])->group(function () {
45+
Route::get('/dashboard', function () {
46+
return view('dashboard.index'); // Đảm bảo bạn có view 'dashboard.index'
47+
})->name('dashboard'); // Đặt tên route là 'dashboard'
48+
});
49+
});
3750

3851
// Login và có quyền admin
39-
// Route::middleware(['auth', CheckPermission::class . ':admin'])->group(function () {
52+
Route::middleware(['auth', CheckPermission::class . ':admin'])->group(function () {
53+
54+
// Khoa
55+
Route::get('/khoa', [KhoaController::class, 'index'])->name('khoa.index');
4056
Route::get('/khoa/create', [KhoaController::class, 'create'])->name('khoa.create');
4157
Route::get('/khoa/{id}/edit', [KhoaController::class, 'edit'])->name('khoa.edit');
4258
Route::post('/khoa', [KhoaController::class, 'store'])->name('khoa.store');
4359
Route::put('/khoa/{id}', [KhoaController::class, 'update'])->name('khoa.update');
4460
Route::delete('/khoa/{id}', [KhoaController::class, 'destroy'])->name('khoa.destroy');
45-
4661
Route::get('/khoa/timkiem', [KhoaController::class, 'search'])->name('khoa.search');
47-
//});
48-
49-
// Nghành
50-
Route::get('/nganh', [NganhController::class, 'index'])->name('nganh.index');
51-
Route::get('/nganh/search', [NganhController::class, 'search'])->name('nganh.search');
52-
Route::get('/nganh/create', [NganhController::class, 'create'])->name('nganh.create');
53-
Route::post('/nganh', [NganhController::class, 'store'])->name('nganh.store');
54-
Route::get('/nganh/{id}/edit', [NganhController::class, 'edit'])->name('nganh.edit');
55-
Route::put('/nganh/{id}', [NganhController::class, 'update'])->name('nganh.update');
56-
Route::delete('/nganh/{id}', [NganhController::class, 'destroy'])->name('nganh.destroy');
57-
58-
// lớp
59-
Route::get('/lop', [LopController::class, 'index'])->name('lop.index');
60-
Route::get('/lop/timkiem', [LopController::class, 'search'])->name('lop.search');
61-
Route::get('/lop/create', [LopController::class, 'create'])->name('lop.create');
62-
Route::post('/lop', [LopController::class, 'store'])->name('lop.store');
63-
Route::get('/lop/{id}/edit', [LopController::class, 'edit'])->name('lop.edit');
64-
Route::put('/lop/{id}', [LopController::class, 'update'])->name('lop.update');
65-
Route::delete('/lop/{id}', [LopController::class, 'destroy'])->name('lop.destroy');
66-
67-
// Sinh viên
68-
Route::get('/sinhvien', [SinhVienController::class, 'index'])->name('sinhvien.index');
69-
Route::get('/sinhvien/search', [SinhVienController::class, 'search'])->name('sinhvien.search');
70-
Route::get('/sinhvien/create', [SinhVienController::class, 'create'])->name('sinhvien.create');
71-
Route::post('/sinhvien', [SinhVienController::class, 'store'])->name('sinhvien.store');
72-
Route::get('/sinhvien/{id}/edit', [SinhVienController::class, 'edit'])->name('sinhvien.edit');
73-
Route::put('/sinhvien/{id}', [SinhVienController::class, 'update'])->name('sinhvien.update');
74-
Route::delete('/sinhvien/{id}', [SinhVienController::class, 'destroy'])->name('sinhvien.destroy');
75-
76-
// Môn học
77-
Route::get('/monhoc', [MonHocController::class, 'index'])->name('monhoc.index');
78-
Route::get('/monhoc/search', [MonHocController::class, 'search'])->name('monhoc.search');
79-
Route::get('/monhoc/create', [MonHocController::class, 'create'])->name('monhoc.create');
80-
Route::post('/monhoc', [MonHocController::class, 'store'])->name('monhoc.store');
81-
Route::get('/monhoc/{id}/edit', [MonHocController::class, 'edit'])->name('monhoc.edit');
82-
Route::put('/monhoc/{id}', [MonHocController::class, 'update'])->name('monhoc.update');
83-
Route::delete('/monhoc/{id}', [MonHocController::class, 'destroy'])->name('monhoc.destroy');
62+
63+
// Nghành
64+
Route::get('/nganh', [NganhController::class, 'index'])->name('nganh.index');
65+
Route::get('/nganh/search', [NganhController::class, 'search'])->name('nganh.search');
66+
Route::get('/nganh/create', [NganhController::class, 'create'])->name('nganh.create');
67+
Route::post('/nganh', [NganhController::class, 'store'])->name('nganh.store');
68+
Route::get('/nganh/{id}/edit', [NganhController::class, 'edit'])->name('nganh.edit');
69+
Route::put('/nganh/{id}', [NganhController::class, 'update'])->name('nganh.update');
70+
Route::delete('/nganh/{id}', [NganhController::class, 'destroy'])->name('nganh.destroy');
71+
72+
// lớp
73+
Route::get('/lop', [LopController::class, 'index'])->name('lop.index');
74+
Route::get('/lop/timkiem', [LopController::class, 'search'])->name('lop.search');
75+
Route::get('/lop/create', [LopController::class, 'create'])->name('lop.create');
76+
Route::post('/lop', [LopController::class, 'store'])->name('lop.store');
77+
Route::get('/lop/{id}/edit', [LopController::class, 'edit'])->name('lop.edit');
78+
Route::put('/lop/{id}', [LopController::class, 'update'])->name('lop.update');
79+
Route::delete('/lop/{id}', [LopController::class, 'destroy'])->name('lop.destroy');
80+
81+
// Sinh viên
82+
Route::get('/sinhvien', [SinhVienController::class, 'index'])->name('sinhvien.index');
83+
Route::get('/sinhvien/search', [SinhVienController::class, 'search'])->name('sinhvien.search');
84+
Route::get('/sinhvien/create', [SinhVienController::class, 'create'])->name('sinhvien.create');
85+
Route::post('/sinhvien', [SinhVienController::class, 'store'])->name('sinhvien.store');
86+
Route::get('/sinhvien/{id}/edit', [SinhVienController::class, 'edit'])->name('sinhvien.edit');
87+
Route::put('/sinhvien/{id}', [SinhVienController::class, 'update'])->name('sinhvien.update');
88+
Route::delete('/sinhvien/{id}', [SinhVienController::class, 'destroy'])->name('sinhvien.destroy');
89+
90+
// Môn học
91+
Route::get('/monhoc', [MonHocController::class, 'index'])->name('monhoc.index');
92+
Route::get('/monhoc/search', [MonHocController::class, 'search'])->name('monhoc.search');
93+
Route::get('/monhoc/create', [MonHocController::class, 'create'])->name('monhoc.create');
94+
Route::post('/monhoc', [MonHocController::class, 'store'])->name('monhoc.store');
95+
Route::get('/monhoc/{id}/edit', [MonHocController::class, 'edit'])->name('monhoc.edit');
96+
Route::put('/monhoc/{id}', [MonHocController::class, 'update'])->name('monhoc.update');
97+
Route::delete('/monhoc/{id}', [MonHocController::class, 'destroy'])->name('monhoc.destroy');
98+
99+
});
84100

85101
// câu hỏi
86102
Route::get('/cauhoi', [CauHoiController::class, 'index'])->name('cauhoi.index');

0 commit comments

Comments
 (0)