admin的数据库文件补全,修复uvue中的数据库接入bug

This commit is contained in:
comlibmb
2026-02-25 10:02:50 +08:00
parent 5d00e3d74e
commit dc8f899610
40 changed files with 1629 additions and 625 deletions

View File

@@ -3,7 +3,7 @@
-- 位置docs/sql/30_rpc/cms/
-- 对象类型RPC 函数 (SECURITY DEFINER)
-- 版本v1
-- 说明:管理端删除文章分类(需检查是否有关联文章)
-- 说明:管理端删除文章分类(支持级联软删除分类下的文章)
-- =====================================================================================
CREATE OR REPLACE FUNCTION public.rpc_admin_article_category_delete(
@@ -15,33 +15,32 @@ SET search_path = public
LANGUAGE plpgsql
AS $$
DECLARE
v_has_articles BOOLEAN;
v_ok BOOLEAN;
v_user_id UUID;
BEGIN
-- 1. 权限检查
IF NOT EXISTS (
SELECT 1 FROM public.ak_users
WHERE auth_id = auth.uid() AND role IN ('admin', 'analytics')
) THEN
RAISE EXCEPTION 'Permission denied';
IF NOT public.check_admin_permission('cms:category:delete') THEN
RAISE EXCEPTION 'Permission denied: cms:category:delete';
END IF;
-- 2. 检查是否有关联文章
SELECT EXISTS (
SELECT 1 FROM public.ml_articles
WHERE category_id = p_id
) INTO v_has_articles;
-- 2. 获取当前操作用户 ID
SELECT id INTO v_user_id FROM public.ak_users WHERE auth_id = auth.uid();
IF v_has_articles THEN
RAISE EXCEPTION 'Cannot delete category with associated articles';
END IF;
-- 3. 级联软删除:该分类下的所有文章
UPDATE public.ml_articles
SET deleted_at = now(),
deleted_by = v_user_id
WHERE category_id = p_id AND deleted_at IS NULL;
-- 3. 执行物理删除
DELETE FROM public.ml_article_categories WHERE id = p_id;
-- 4. 软删除分类本身
UPDATE public.ml_article_categories
SET deleted_at = now(),
deleted_by = v_user_id
WHERE id = p_id AND deleted_at IS NULL;
GET DIAGNOSTICS v_ok = ROW_COUNT;
RETURN v_ok;
END;
$$;
COMMENT ON FUNCTION public.rpc_admin_article_category_delete IS '管理员删除文章分类(含关联性检查';
COMMENT ON FUNCTION public.rpc_admin_article_category_delete IS '管理员删除文章分类(级联软删除关联文章';

View File

@@ -3,7 +3,7 @@
-- 位置docs/sql/30_rpc/cms/
-- 对象类型RPC 函数 (SECURITY DEFINER)
-- 版本v1
-- 说明:管理端删除文章记录
-- 说明:管理端删除文章记录(使用通用权限校验)
-- =====================================================================================
CREATE OR REPLACE FUNCTION public.rpc_admin_article_delete(
@@ -16,17 +16,21 @@ LANGUAGE plpgsql
AS $$
DECLARE
v_ok BOOLEAN;
v_user_id UUID;
BEGIN
-- 1. 权限检查
IF NOT EXISTS (
SELECT 1 FROM public.ak_users
WHERE auth_id = auth.uid() AND role IN ('admin', 'analytics')
) THEN
RAISE EXCEPTION 'Permission denied';
IF NOT public.check_admin_permission('cms:article:delete') THEN
RAISE EXCEPTION 'Permission denied: cms:article:delete';
END IF;
-- 2. 执行物理删除
DELETE FROM public.ml_articles WHERE id = p_id;
-- 2. 获取当前操作用户 ID
SELECT id INTO v_user_id FROM public.ak_users WHERE auth_id = auth.uid();
-- 3. 执行软删除
UPDATE public.ml_articles
SET deleted_at = now(),
deleted_by = v_user_id
WHERE id = p_id AND deleted_at IS NULL;
GET DIAGNOSTICS v_ok = ROW_COUNT;
RETURN v_ok;