Initial commit of akmon project

This commit is contained in:
2026-01-20 08:04:15 +08:00
commit 77a2bab985
1309 changed files with 343305 additions and 0 deletions

View File

@@ -0,0 +1,153 @@
# 商城数据库语法修正报告
## 修正概述
本次修正主要解决了 PostgreSQL RLS (Row Level Security) 策略语法错误,确保数据库脚本可以正常执行。
## 主要修正内容
### 1. RLS 策略语法修正
**问题描述:**
原始 RLS 策略使用了错误的语法:
```sql
-- 错误语法
CREATE POLICY ml_products_modify_policy ON public.ml_products
FOR INSERT, UPDATE, DELETE USING (...);
```
**修正方案:**
PostgreSQL 不支持在单个策略中同时定义多个操作类型,需要分别创建:
- SELECT 操作使用 `USING` 子句
- INSERT 操作使用 `WITH CHECK` 子句
- UPDATE 操作使用 `USING` 子句
- DELETE 操作使用 `USING` 子句
**修正后语法:**
```sql
-- 正确语法
CREATE POLICY ml_products_select_policy ON public.ml_products
FOR SELECT USING (status = 1);
CREATE POLICY ml_products_insert_policy ON public.ml_products
FOR INSERT WITH CHECK (
auth.uid()::text = (SELECT auth_id::text FROM public.ak_users WHERE id = merchant_id)
);
CREATE POLICY ml_products_update_policy ON public.ml_products
FOR UPDATE USING (
auth.uid()::text = (SELECT auth_id::text FROM public.ak_users WHERE id = merchant_id)
);
CREATE POLICY ml_products_delete_policy ON public.ml_products
FOR DELETE USING (
auth.uid()::text = (SELECT auth_id::text FROM public.ak_users WHERE id = merchant_id)
);
```
### 2. 修正的数据表
以下数据表的 RLS 策略已全部修正:
1. **ml_user_profiles** - 用户档案表
2. **ml_user_addresses** - 用户地址表
3. **ml_shopping_cart** - 购物车表
4. **ml_user_favorites** - 用户收藏表
5. **ml_browse_history** - 浏览历史表
6. **ml_user_coupons** - 用户优惠券表
7. **ml_orders** - 订单表
8. **ml_products** - 商品表
### 3. 验证的语法正确性
以下语法已验证无误:
**扩展启用语法**
```sql
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE EXTENSION IF NOT EXISTS "pg_stat_statements";
CREATE EXTENSION IF NOT EXISTS "btree_gin";
```
**UUID 生成语法**
```sql
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
```
**JSONB 数据类型**
```sql
preferences JSONB DEFAULT '{}'
image_urls JSONB DEFAULT '[]'
```
**函数定义语法**
```sql
CREATE OR REPLACE FUNCTION public.update_updated_at_column()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_at = NOW();
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
```
**触发器语法**
```sql
CREATE TRIGGER trigger_ml_user_profiles_updated_at
BEFORE UPDATE ON public.ml_user_profiles
FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
```
## 修正后的文件状态
**文件路径:** `h:\blews\akmon\doc_mall\database\complete_mall_database.sql`
**修正前行数:** 1056 行
**修正后行数:** 1177 行(增加了分离的 RLS 策略定义)
## RLS 策略权限设计
### 用户数据权限
- **原则:** 用户只能访问自己的数据
- **实现:** 通过 `auth.uid()``ak_users.auth_id` 关联验证
### 商品权限
- **查看权限:** 所有人可查看已上架商品status = 1
- **管理权限:** 商家只能管理自己的商品
### 订单权限
- **查看权限:** 用户可查看自己的订单,商家可查看自己店铺的订单
- **实现:** 同时检查 `user_id``merchant_id`
## 数据库兼容性
**PostgreSQL 兼容**
- 使用标准 PostgreSQL 语法
- 支持 JSONB 数据类型
- 使用 uuid-ossp 扩展
**Supabase 兼容**
- 支持 Row Level Security
- 使用 `auth.uid()` 进行身份验证
- 遵循 Supabase 权限模型
## 部署建议
1. **执行顺序:** 按脚本中的顺序依次执行
2. **权限检查:** 确保数据库用户有创建扩展的权限
3. **数据验证:** 执行后验证 RLS 策略是否正确生效
4. **测试建议:** 在测试环境先执行完整脚本验证
## 修正完成状态
**语法错误已修正**
**RLS 策略已优化**
**PostgreSQL 兼容性已确认**
**Supabase 兼容性已确认**
**可安全部署**
---
**修正时间:** 2024年12月19日
**修正文件:** complete_mall_database.sql
**验证状态:** 语法验证通过,可进行部署测试