ডেভেলপারদের মাঝে একটি ভুল ধারণা আছে যে, Supabase হলো "Firebase এর ক্লোন"। কিন্তু আসলে Supabase এর কোর হলো একটি সম্পূর্ণ Relational PostgreSQL Database। এর সবচেয়ে পাওয়ারফুল ফিচার হলো RLS, যা আপনার ডাটাবেসকে হ্যাকারদের থেকে ১০০% সুরক্ষিত রাখে।
সাধারণত আমরা আমাদের Node.js ব্যাকএন্ডে (API লেভেলে) ইউজার লগ-ইন করেছে কি না তা চেক করি। কিন্তু কোনো হ্যাকার যদি API কে বাইপাস করে সরাসরি আপনার ডাটাবেস ইউআরএলে (Database URL) হিট করে? তখন ডাটাবেস কিন্তু জানে না এই ব্যক্তি অথোরাইজড কি না!
The RLS Solution: Supabase-এ আমরা সিকিউরিটি লজিক Node.js-এ না লিখে, সরাসরি PostgreSQL ডাটাবেসের ভেতরে SQL দিয়ে লিখে দিই। একে বলে Zero-Trust Architecture। এখন কেউ API বাইপাস করে সরাসরি ডাটাবেসে হিট করলেও, ডাটাবেস ইঞ্জিন নিজেই ইউজারের JWT টোকেন চেক করবে। টোকেন ইনভ্যালিড হলে ডাটাবেস একটি Row (ডেটা) ও রিটার্ন করবে না!
নিচে দেখুন কিভাবে আমরা প্রথমে SQL দিয়ে পলিসি তৈরি করি, যেন শুধু লগ-ইন করা ইউজারই ছবি আপলোড করতে পারে। এরপর ক্লায়েন্ট সাইড (Javascript SDK) দিয়ে সরাসরি স্টোরেজ বাকেটে ফাইল পুশ করা হয়।
CREATE POLICY "Allow authenticated users to upload avatars" ON storage.objects FOR INSERT WITH CHECK ( bucket_id = 'avatars' AND auth.role() = 'authenticated' );
import { supabase } from './supabaseClient'; export async function uploadAvatar(file) { // Database engine will reject this if auth token is missing! const { data, error } = await supabase .storage .from('avatars') .upload(`public/${file.name}`, file); if (error) throw error; return data; }
উপরে লেখা SQL পলিসিটি বাস্তবে কীভাবে কাজ করে, তা দেখতে নিচের ডেমোটি ট্রাই করুন। লগ-আউট থাকা অবস্থায় ফাইল আপলোড করার চেষ্টা করুন, দেখবেন ডাটাবেস ইঞ্জিন আপনাকে ব্লক করে দিয়েছে!
Click to push payload directly to PostgreSQL Storage Bucket