Giới thiệu về Role và Permission trong Supabase
Khi xây dựng ứng dụng web hoặc mobile, một trong những vấn đề quan trọng nhất là kiểm soát ai được làm gì. Đó chính là lúc khái niệm Role và Permission phát huy tác dụng. Supabase, với nền tảng Postgres mạnh mẽ, cung cấp một hệ thống quản lý quyền hạn linh hoạt, cho phép bạn bảo mật dữ liệu một cách hiệu quả. Bài viết này sẽ hướng dẫn bạn từng bước thiết lập và quản lý role, permission trong Supabase, giúp ứng dụng của bạn vừa an toàn vừa dễ mở rộng.
Cơ bản về Role và Permission
Trong Postgres (và Supabase), role là một thực thể có thể sở hữu quyền hạn (permission) để truy cập hoặc thao tác trên database. Mỗi role có thể đại diện cho một người dùng, một ứng dụng, hoặc một nhóm người dùng. Permission quy định role đó được phép thực hiện những hành động nào—chẳng hạn như SELECT, INSERT, UPDATE, DELETE trên một bảng cụ thể.
Supabase tự động tạo một vài role mặc định như authenticated (cho người dùng đã đăng nhập) và anonymous (cho người dùng chưa đăng nhập). Bạn có thể tạo thêm role tùy chỉnh để phù hợp với nhu cầu ứng dụng, ví dụ như editor, admin, hoặc moderator.
Tạo và Quản lý Role trong Supabase
Để tạo role mới, bạn có thể sử dụng SQL Editor trong Supabase dashboard. Ví dụ:
-- Tạo role editor
CREATE ROLE editor;
-- Cấp quyền login cho role
ALTER ROLE editor WITH LOGIN;
Nếu bạn muốn role này thuộc một nhóm (ví dụ: authenticated), bạn có thể gán như sau:
GRANT authenticated TO editor;
Để xóa role, dùng:
DROP ROLE editor;
Lưu ý: Một số role hệ thống không thể xóa, chỉ có thể gán hoặc thu hồi quyền.
Gán Permission cho Role
Sau khi có role, bước tiếp theo là gán permission cụ thể cho role đó trên các bảng. Trong Supabase, bạn có thể thực hiện qua SQL hoặc bảng điều khiển (Table Editor).
Ví dụ, cấp quyền SELECT, INSERT, UPDATE cho role editor trên bảng posts:
GRANT SELECT, INSERT, UPDATE ON posts TO editor;
GRANT USAGE, SELECT ON SEQUENCE posts_id_seq TO editor;
Nếu muốn thu hồi quyền:
Quảng cáo
300x250 In-Content Advertisement
REVOKE ALL ON posts FROM editor;
Bạn cũng có thể sử dụng Row Level Security (RLS) để kiểm soát quyền ở cấp độ từng dòng dữ liệu. RLS giúp đảm bảo người dùng chỉ nhìn thấy hoặc thao tác được với dữ liệu mà họ được phép.
Row Level Security (RLS) trong Supabase
RLS là tính năng mạnh mẽ của Postgres, cho phép bạn viết policy (chính sách) để kiểm soát truy cập dữ liệu. Để bật RLS cho bảng posts:
ALTER TABLE posts ENABLE ROW LEVEL SECURITY;
Tiếp theo, tạo policy cho role editor:
CREATE POLICY "Editors can view and edit own posts" ON posts
FOR ALL
TO editor
USING (user_id = auth.uid())
WITH CHECK (user_id = auth.uid());
Policy trên cho phép editor chỉ được xem và sửa những dòng posts do chính họ tạo ra (user_id = auth.uid()). Bạn có thể tạo nhiều policy khác nhau cho các role khác nhau.
Quản lý Role và Permission qua Supabase Dashboard
Ngoài việc dùng SQL, Supabase cung cấp giao diện thân thiện trong phần Authentication > User management và Policies để quản lý role và permission. Bạn có thể:
- Xem danh sách role và user. - Gán role cho user cụ thể. - Tạo, chỉnh sửa policy một cách trực quan. - Test policy trước khi áp dụng.
Thực hành tốt khi quản lý Role và Permission
- Nguyên tắc tối thiểu quyền (Principle of Least Privilege): Chỉ cấp những quyền thực sự cần thiết cho từng role. - Sử dụng tên role có ý nghĩa: Giúp dễ quản lý và hiểu mục đích của từng role. - Kiểm tra và cập nhật policy thường xuyên: Khi ứng dụng phát triển, yêu cầu về quyền hạn có thể thay đổi. - Test kỹ trước khi triển khai: Đảm bảo role và policy hoạt động đúng như mong đợi.
Kết luận
Quản lý role và permission trong Supabase không chỉ giúp bảo mật dữ liệu, mà còn mang lại trải nghiệm người dùng tốt hơn bằng cách hiển thị đúng nội dung cho đúng đối tượng. Với sự kết hợp giữa Postgres và các công cụ trực quan của Supabase, bạn hoàn toàn có thể xây dựng một hệ thống phân quyền mạnh mẽ, dễ bảo trì và mở rộng. Hãy bắt đầu từ những bước cơ bản, kiểm thử kỹ lưỡng, và dần hoàn thiện hệ thống permission theo nhu cầu thực tế của ứng dụng.