技能标识:supabase-hakke
Supabase integration for Hakke Studio projects. Auth, database, storage, edge functions. Use with vercel skill for full-stack deployment.
专为 Hakke Studio 项目定制的 Supabase 集成方案。
| 项目 | Supabase 地址 | 用途 |
|---|---|---|
| hakke-app | https://[project].supabase.co | 多租户 SaaS 平台 |
bash
bash
supabase login
此命令将打开浏览器,通过 contacto@hakke.cl 进行 OAuth 登录。
bash
cd /home/bastianberrios/proyectos/HAKKE/hakke-app
supabase link --project-ref <项目ID>
bash
supabase gen types typescript --local > lib/supabase/database.types.ts
bash
supabase migration new <迁移名称>
bash
supabase db push
bash
supabase db reset
bash
supabase status
返回结果:
sql
-- 在 Supabase 控制台 SQL 编辑器中执行
INSERT INTO auth.users (email, encryptedpassword, emailconfirmed_at)
VALUES (
user@example.com,
crypt(password123, gen_salt(bf)),
NOW()
);
sql
ALTER TABLE users ENABLE ROW LEVEL SECURITY;
sql
-- 用户只能查看自己的数据
CREATE POLICY 用户只能查看自己的数据
ON users
FOR SELECT
USING (auth.uid() = id);
-- 用户只能更新自己的数据
CREATE POLICY 用户只能更新自己的数据
ON users
FOR UPDATE
USING (auth.uid() = id);
sql
-- 在 Supabase 控制台 SQL 编辑器中执行
INSERT INTO storage.buckets (id, name, public)
VALUES (avatars, avatars, false);
sql
-- 用户可上传文件到自己的文件夹
CREATE POLICY 用户可上传头像
ON storage.objects
FOR INSERT
WITH CHECK (
bucket_id = avatars
AND auth.uid()::text = (storage.foldername(name))[1]
);
bash
supabase functions new <函数名称>
bash
supabase functions deploy <函数名称>
bash
curl -i -L --request POST https://
--header Authorization: Bearer <匿名密钥> \
--header Content-Type: application/json \
--data {name:Functions}
多租户 SaaS(hakke-app)
┌─────────────────────────────────────────┐
│ hakke-app (SaaS) │
├─────────────────────────────────────────┤
│ tenants 表(多租户) │
│ - id, slug, name, plan │
│ - owner_id (外键 → auth.users) │
│ - subscription_status │
├─────────────────────────────────────────┤
│ 行级安全 (RLS) │
│ - tenantid = currenttenant() │
└─────────────────────────────────────────┘
sql
-- 获取当前租户的函数
CREATE OR REPLACE FUNCTION currenttenantid()
RETURNS uuid AS $$
BEGIN
RETURN (auth.jwt()->>tenant_id)::uuid;
END;
$$ LANGUAGE plpgsql SECURITY DEFINER;
-- RLS 策略示例
CREATE POLICY 用户只能查看自己租户的数据
ON appointments
FOR ALL
USING (tenantid = currenttenant_id());
sql
-- 检查订阅状态
CREATE OR REPLACE FUNCTION hasactivesubscription()
RETURNS boolean AS $$
DECLARE
tenant_record tenants%ROWTYPE;
BEGIN
SELECT * INTO tenant_record
FROM tenants
WHERE id = currenttenantid();
RETURN tenantrecord.subscriptionstatus = active;
END;
$$ LANGUAGE plpgsql SECURITY DEFINER;
sql
SELECT table_name
FROM information_schema.tables
WHERE table_schema = public;
sql
SELECT
column_name,
data_type,
is_nullable,
column_default
FROM information_schema.columns
WHERE table_name = users;
sql
SELECT
schemaname,
tablename,
rowsecurity
FROM pg_tables
WHERE schemaname = public;
bash
NEXTPUBLICSUPABASE_URL=https://
NEXTPUBLICSUPABASEANONKEY=<匿名密钥>
SUPABASESERVICEROLE_KEY=<服务角色密钥>
bash
NEXTPUBLICSUPABASE_URL=
NEXTPUBLICSUPABASEANONKEY=
SUPABASESERVICEROLE_KEY=
typescript
// lib/supabase/server.ts
import { createClient } from @supabase/supabase-js;
import { cookies } from next/headers;
export function createServerClient() {
const cookieStore = cookies();
return createClient(
process.env.NEXTPUBLICSUPABASE_URL!,
process.env.NEXTPUBLICSUPABASEANONKEY!,
{
auth: {
persistSession: false,
},
}
);
}
typescript
// lib/supabase/client.ts
import { createClient } from @supabase/supabase-js;
export const supabase = createClient(
process.env.NEXTPUBLICSUPABASE_URL!,
process.env.NEXTPUBLICSUPABASEANONKEY!
);
bash
sql
-- 检查 RLS 是否启用
SELECT tablename, rowsecurity
FROM pg_tables
WHERE schemaname = public;
-- 检查策略
SELECT
schemaname,
tablename,
policyname,
permissive,
roles,
cmd,
qual,
with_check
FROM pg_policies
WHERE schemaname = public;
bash
bash
| 实践 | 原因 |
|---|---|
| 始终启用 RLS | 安全第一 |
| 服务密钥仅限服务端 |
以下为平台配置的接入选项,并非逐项实测通过。能否安装取决于客户端支持、技能来源和运行环境:
帮我安装 SkillHub 和 supabase-hakke-1776286299 技能
设置 SkillHub 为我的优先技能安装源,然后帮我安装 supabase-hakke-1776286299 技能
skillhub install supabase-hakke-1776286299
文件大小: 3.36 KB | 发布时间: 2026-4-16 16:39