Lisensi Google Apps Script Spreadsheet
Buat Lisensi Google Apps Script pada Spreadsheet
Kosong
Kosong
Kosong
Kosong
Kosong
Kosong
Kosong
Kosong
Kosong
Kosong
Kosong
Kosong
✅ 1. Membuat Spreadsheet Manual
Digunakan untuk menyimpan daftar lisensi atau email pengguna.
๐น Langkah-langkah:
- Buka Google Sheets → Spreadsheet kosong baru akan terbuka.
- Pada kolom A1, ketik
Email. - Masukkan email pengguna mulai dari A2 ke bawah. Contoh:
pengguna1@gmail.com
pengguna2@gmail.com - Klik kanan pada tab sheet (nama default Sheet1) → pilih Rename → ubah nama menjadi Lisensi.
✅ 2. Cara Menemukan SPREADSHEET_ID
๐น Langkah-langkah:
- Simpan spreadsheet yang sudah dibuat.
- Lihat URL pada browser. Contoh:
https://docs.google.com/spreadsheets/d/1w8M8H9XeWqAAzEoIl82gVJd9uWLvCxMcC3XvGyHv6sE/edit#gid=0 - Bagian yang ditebalkan adalah SPREADSHEET_ID. Salin ID tersebut.
- Masukkan ke dalam
Code.gsseperti ini:
const sheet = SpreadsheetApp.openById('1w8M8H9XeWqAAzEoIl82gVJd9uWLvCxMcC3XvGyHv6sE').getSheetByName('Lisensi');
๐ธ Opsi 1: SATU Spreadsheet
Pada opsi ini, kamu menyimpan semua data (data pengguna, data lisensi, log, dll) dalam satu file spreadsheet. Apps Script juga langsung melekat di dalam file yang sama.
- Apps Script diakses melalui menu Extensions > Apps Script.
- SPREADSHEET_ID cukup satu, dan kamu bisa akses sheet lain seperti:
Sheet Data,Sheet Lisensi,Sheet Log, dll.
๐ Keuntungan:
- ✅ Praktis — semua terpusat dalam satu file.
- ✅ Tidak perlu atur izin antar-spreadsheet.
๐ธ Opsi 2: DUA Spreadsheet
Dalam pendekatan ini, kamu memisahkan spreadsheet proyek (berisi data yang digunakan user) dan spreadsheet lisensi (berisi daftar email pengguna yang sah). Apps Script bisa melekat di salah satu — biasanya di spreadsheet utama.
- Spreadsheet A: Untuk data proyek (laporan, input, dsb).
- Spreadsheet B: Untuk lisensi — hanya developer yang punya akses.
- Apps Script menggunakan
SpreadsheetApp.openById()untuk mengakses Spreadsheet B dari server-side.
๐ Keuntungan:
- ✅ Lisensi lebih aman dan terpisah dari user.
- ✅ User tidak bisa melihat, menyalin, atau mengubah daftar lisensi.
- ✅ Spreadsheet lisensi bisa digunakan ulang untuk proyek lain.
๐ซ Jangan bagikan file Apps Script ke siapa pun!
- Di Google Drive, pastikan file proyek Apps Script tidak dibagikan ke publik atau pengguna lain.
- Jika Apps Script terikat ke spreadsheet (bound script), pastikan hanya spreadsheet-nya yang dibagikan — bukan script-nya.
- Hindari memberikan akses editor pada Apps Script kecuali benar-benar diperlukan.
✅ Solusi Aman: Deploy sebagai Web App (server-side)
Dengan metode ini, pengguna hanya akan melihat tampilan HTML, tanpa akses ke kode di Code.gs.
function doGet() {
return HtmlService.createHtmlOutputFromFile('main');
}
๐ Ingin keamanan lebih tinggi?
Gunakan sistem berikut untuk memastikan logika dan kontrol akses tetap aman:
- Gunakan Apps Script standalone (berdiri sendiri) (tidak melekat di spreadsheet).
- Deploy sebagai Web App dengan pengaturan "Execute as: Me (developer)".
- Verifikasi lisensi menggunakan spreadsheet pribadi (yang hanya kamu akses).
- HTML hanya menampilkan antarmuka pengguna (UI), bukan logika aplikasi.
๐ก Detail Perlindungan Google Apps Script
Berikut adalah skenario umum terkait keamanan dan aksesibilitas kode Apps Script dalam berbagai bentuk distribusi. Gunakan pendekatan yang sesuai agar script penting dan rahasia tetap terlindungi:
| Skenario | Bisa Lihat Script? | Bisa Edit? | Aman? |
|---|---|---|---|
| Kamu deploy sebagai Web App (akses saja) | ❌ Tidak | ❌ Tidak | ✅ Ya |
| Kamu bagikan Spreadsheet, tapi tidak script-nya | ❌ Tidak | ❌ Tidak | ✅ Ya |
| Kamu bagikan Apps Script sebagai Editor | ✅ Bisa | ✅ Bisa | ❌ Tidak aman |
| Kamu publish sebagai add-on terbuka (publik) | ✅ Bisa dilihat (via eksplorasi) | ❌ Tidak bisa edit | ⚠️ Tidak ideal untuk kode rahasia |
Kesimpulan: Jika Anda ingin menyembunyikan logika aplikasi, gunakan Web App standalone (berdiri sendiri) dan pastikan pengguna hanya mengakses antarmuka tanpa akses editor atau eksplorasi kode.
๐ Ingin keamanan lebih tinggi?
✅ Gunakan sistem berikut untuk meningkatkan keamanan aplikasi yang dibangun dengan Google Apps Script:
- Gunakan Apps Script standalone (berdiri sendiri) (terpisah dari spreadsheet pengguna).
- Deploy sebagai Web App dengan pengaturan "Execute as: Me (developer)".
- Lisensi dicek dari Spreadsheet pribadi yang hanya bisa diakses oleh developer.
- HTML hanya untuk tampilan (UI), logika penting tetap di-backend (Code.gs).
๐ฏ Kesimpulan: Apa yang bisa dilihat/diedit oleh pengguna?
| Hal | Bisa Dilihat/Diedit Pengguna? |
|---|---|
| Code.gs di Web App | ❌ Tidak bisa |
| HTML via HtmlService | ⚠️ Bisa dilihat di browser (gunakan dengan hati-hati) |
| Spreadsheet Lisensi | ❌ Tidak bisa jika tidak dibagikan |
| Apps Script Project | ❌ Tidak bisa jika tidak dibagikan |
๐ Struktur Lisensi Aman
๐ Spreadsheet Lisensi adalah file pusat yang berisi daftar email pengguna yang diizinkan untuk menggunakan aplikasi. File ini bersifat privat dan hanya diakses oleh Apps Script dari sisi server.
- Contoh isi spreadsheet:
user1@gmail.comuser2@domain.com - Tidak perlu dibagikan ke siapa pun.
- Hanya kamu (developer) yang memiliki akses ke file ini.
- Digunakan untuk verifikasi lisensi saat user mengakses aplikasi.
Tips Teknis: Simpan Spreadsheet Lisensi di Google Drive kamu dengan nama yang jelas dan catat spreadsheetId-nya untuk digunakan dalam Apps Script (lihat bagian "S. Apps Script").
๐ Tambahan: Keamanan Spreadsheet Lisensi
- Harus terpisah dari spreadsheet proyek/user.
- Berfungsi sebagai pusat validasi lisensi secara server-side.
- Tidak dapat diakses oleh pengguna akhir — tidak bisa dilihat, disalin, atau dimodifikasi.
- Hanya Apps Script milik developer yang bisa membacanya via
openById().
Cara Atur Akses Spreadsheet Lisensi:
- Buka spreadsheet lisensi (yang berisi daftar email).
- Klik tombol "Bagikan / Share" di kanan atas.
- Pastikan hanya kamu yang memiliki akses.
- Jangan bagikan ke siapa pun, bahkan sebagai viewer/editor.
Kenapa Apps Script tetap bisa membacanya?
- Karena script kamu adalah pemilik spreadsheet tersebut.
openById()bekerja dari sisi server, bukan tergantung akses pengguna.
๐งช Studi Kasus:
- Spreadsheet A: Proyek utama, dipakai user, berisi UI dan data input/output.
- Spreadsheet B: Lisensi, hanya developer yang punya akses.
Saat user membuka Web App:
- ✅ Mereka bisa pakai Spreadsheet A.
- ❌ Mereka tidak bisa melihat Spreadsheet B.
- ✅ Tapi Apps Script tetap bisa membaca Spreadsheet B dan melakukan verifikasi.
Di dalam Code.gs pada Google Apps Script, Anda bisa membuat fungsi untuk memeriksa apakah email pengguna yang membuka aplikasi termasuk dalam daftar lisensi. Ini berguna untuk membatasi akses hanya kepada pengguna tertentu berdasarkan alamat email yang tersimpan di spreadsheet lisensi.
Contoh fungsi:
function cekLisensi() {
const sheet = SpreadsheetApp.openById('SPREADSHEET_ID_LISENSI(B)').getSheetByName('Lisensi');
const email = Session.getActiveUser().getEmail();
const daftar = sheet.getRange(2, 1, sheet.getLastRow() - 1).getValues().flat();
return daftar.includes(email);
}
Penjelasan fungsi:
SpreadsheetApp.openById(...): Membuka spreadsheet secara eksplisit berdasarkan ID-nya. Jika kamu meng-host Apps Script sebagai Web App, metode ini lebih aman dibandinggetActiveSpreadsheet()karena tidak bergantung pada spreadsheet mana yang sedang dibuka oleh pengguna. DenganopenById(), script selalu mengakses file yang kamu tentukan sendiri, sehingga validasi dan logika tetap berjalan meskipun pengguna membuka spreadsheet berbeda.getSheetByName('Lisensi'): Mengakses sheet bernama "Lisensi".Session.getActiveUser().getEmail(): Mengambil email pengguna yang sedang membuka aplikasi.getRange(...).getValues().flat(): Mengambil seluruh data email dari kolom A mulai dari baris ke-2, lalu diratakan menjadi array 1 dimensi.daftar.includes(email): Memeriksa apakah email pengguna termasuk dalam daftar email yang diizinkan.
Catatan penting: Pastikan spreadsheet lisensi dapat diakses oleh Apps Script dan email pengguna bisa dikenali. Untuk itu, gunakan akun Google Workspace jika ingin memastikan email pengguna terbaca melalui Session.getActiveUser().
๐ Spreadsheet Proyek adalah spreadsheet yang digunakan langsung oleh pengguna akhir (user). File ini bisa kamu bagikan ke pengguna yang telah memiliki lisensi.
- Boleh dan bisa dibagikan ke user (pengguna).
- Berisi antarmuka pengguna (UI) seperti menu, tombol, dan formulir berbasis HTML yang dikendalikan dengan Apps Script.
- Digunakan untuk input dan output data (misalnya: formulir isian, tabel, grafik, dll).
- Tidak menyimpan daftar lisensi. Lisensi diverifikasi lewat koneksi ke Spreadsheet Lisensi yang aman (pusat), bukan disimpan lokal di sini.
๐ Catatan: Meskipun spreadsheet ini dapat diakses dan dimodifikasi oleh user, validasi lisensi tetap dilakukan melalui server (Apps Script), sehingga keamanan kontrol akses tetap terjaga.
Tambahan:
| Komponen | Siapa Bisa Akses? | Fungsi |
|---|---|---|
| Spreadsheet Lisensi | Hanya developer | Daftar email berlisensi |
| Apps Script (dalam spreadsheet user) | Bisa dilihat UI-nya saja | Mengecek lisensi via server |
| Spreadsheet Proyek | Dibagikan ke pengguna | Tempat aplikasi digunakan |
-
Sebagai developer:
- Kamu menyimpan spreadsheet lisensi pribadi
- Kamu menulis script yang hanya berjalan jika email pengguna valid
- Kamu bisa menambahkan fitur seperti: a) Masa berlaku lisensi b) Aktivasi satu kali per user c) Blokir pengguna tertentu
-
Keamanan Tambahan
- Session.getActiveUser().getEmail() hanya berfungsi jika kamu deploy Web App sebagai "user yang mengakses" atau "developer sendiri", tergantung kebutuhan.
- Spreadsheet lisensi tidak pernah terlihat oleh pengguna, karena diakses server-side via openById().
-
W:
-
X:
-
Y:
- Strukturkan proyek full aman (kode server-side saja)
- Proteksi HTML & script klien
- Tambahkan sistem aktivasi berbasis Google Sheets yang hanya bisa dipakai oleh pemilik lisensi
-
Z:
- Buat file LICENSE.txt
- Tambah fungsi cekLisensi()
- Buat sistem aktivasi lisensi lengkap. Mau disertakan sistem kadaluarsa / expired / masa berlaku lisensi juga? Otomatiskan pengecekan lisensi dari Sheets. Tambahkan kunci akses berdasarkan lisensi. Cek nama user juga. Kirim email otomatis kalau tidak berlisensi.
- Tambahkan watermark di UI HTML
Siap saya bantu bangun strukturnya? Mau mulai dari template dasar dulu?
Kosong
Kosong
Comments
Post a Comment