Proyek ini merupakan tugas mata kuliah Pemrograman Web Lanjut yang mengimplementasikan sistem Role-Based Access Control (RBAC) menggunakan Bun.js dan TypeScript. Sistem membatasi akses fitur berdasarkan role yang dimiliki user, sehingga setiap role hanya dapat mengakses resource sesuai permission yang ditetapkan.
Tiga role yang tersedia:
- Admin — akses penuh ke semua resource (users, roles, permissions)
- Editor — hanya dapat melihat dan membuat user, serta melihat role
- Viewer — hanya dapat melihat daftar user
Konsep inti RBAC:
User → memiliki satu Role → Role memiliki banyak Permission → Permission mengatur akses ke resource
- Bun.js (Runtime & Package Manager)
- TypeScript
- Express.js (Web Framework)
- EJS (Template Engine)
- TailwindCSS (Styling)
- MySQL2 (Database)
- express-session + bcryptjs (Autentikasi)
pwl-rbac/
├── .env
├── .env.example
├── .gitignore
├── package.json
├── tsconfig.json
├── tailwind.config.js
├── database.sql
└── src/
├── index.ts
├── seed.ts
├── config/
│ └── database.ts
├── controllers/
│ ├── authController.ts
│ ├── userController.ts
│ ├── roleController.ts
│ └── permissionController.ts
├── middleware/
│ ├── authMiddleware.ts
│ └── rbacMiddleware.ts
├── models/
│ ├── userModel.ts
│ ├── roleModel.ts
│ └── permissionModel.ts
├── routers/
│ ├── authRoutes.ts
│ ├── userRoutes.ts
│ ├── roleRoutes.ts
│ └── permissionRoutes.ts
├── types/
│ └── express.d.ts
└── views/
├── auth/login.ejs
├── error.ejs
├── layouts/
│ ├── main.ejs
│ ├── header.ejs
│ ├── sidebar.ejs
│ └── footer.ejs
├── users/
├── roles/
└── permissions/
-
Persiapan: Pastikan sudah terinstal Bun.js dan MySQL.
-
Clone repositori:
git clone https://github.com/franzxml/pwl-rbac.git cd pwl-rbac -
Salin file environment dan sesuaikan:
cp .env.example .env
Edit
.envdan isi password MySQL serta session secret. -
Install dependensi:
bun install
-
Setup database:
mysql -u root -p < database.sql -
Seed data awal:
bun run seed
-
Jalankan server:
bun run dev
Buka browser di http://localhost:3000
| Username | Password | Role | Akses |
|---|---|---|---|
admin |
admin123 |
Admin | Semua resource |
editor |
editor123 |
Editor | View & Create user, View role |
viewer |
viewer123 |
Viewer | View user saja |
File database.sql berisi schema lengkap. Tabel yang digunakan:
| Tabel | Keterangan |
|---|---|
roles |
Daftar role (admin, editor, viewer) |
permissions |
Daftar permission (user:view, user:create, dll) |
users |
Data user dengan referensi ke role |
role_permissions |
Relasi many-to-many antara role dan permission |
- User login → session disimpan dengan
user.iddanuser.role_id - Setiap route dilindungi middleware
checkPermission('resource:action') - Middleware query ke database untuk mengambil semua permission milik role user
- Jika permission ditemukan → request dilanjutkan
- Jika tidak →
403 Forbidden
Dikembangkan oleh: @franzxml