Files
medical-mall/docs/sql/20_rls/delivery/ak_delivery_rls_v2.sql

64 lines
2.0 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- =====================================================================================
-- RLS: 医养执行端 Delivery 安全策略升级
-- 位置docs/sql/20_rls/delivery/ak_delivery_rls_v2.sql
-- 对象类型RLS 策略
-- 版本v2
-- 说明:保留管理端通过 SECURITY DEFINER RPC 管理,补充执行人员本人直读自己档案。
-- =====================================================================================
ALTER TABLE public.ml_delivery_staff ENABLE ROW LEVEL SECURITY;
ALTER TABLE public.ml_delivery_stations ENABLE ROW LEVEL SECURITY;
-- 清理旧策略
DROP POLICY IF EXISTS delivery_staff_self_select ON public.ml_delivery_staff;
DROP POLICY IF EXISTS delivery_staff_self_update ON public.ml_delivery_staff;
DROP POLICY IF EXISTS delivery_stations_select_active ON public.ml_delivery_stations;
-- 1. 执行人员本人可直读自己的未删除档案
CREATE POLICY delivery_staff_self_select
ON public.ml_delivery_staff
FOR SELECT
TO authenticated
USING (
deleted_at IS NULL
AND EXISTS (
SELECT 1
FROM public.ak_users u
WHERE u.id = ml_delivery_staff.uid
AND u.auth_id = auth.uid()
)
);
-- 2. 执行人员本人可更新自己的在线状态等自有档案字段
CREATE POLICY delivery_staff_self_update
ON public.ml_delivery_staff
FOR UPDATE
TO authenticated
USING (
deleted_at IS NULL
AND EXISTS (
SELECT 1
FROM public.ak_users u
WHERE u.id = ml_delivery_staff.uid
AND u.auth_id = auth.uid()
)
)
WITH CHECK (
deleted_at IS NULL
AND EXISTS (
SELECT 1
FROM public.ak_users u
WHERE u.id = ml_delivery_staff.uid
AND u.auth_id = auth.uid()
)
);
-- 3. 提货点/机构对前台保持只读,仅返回启用且未删除数据
CREATE POLICY delivery_stations_select_active
ON public.ml_delivery_stations
FOR SELECT
TO anon, authenticated
USING (status = 1 AND deleted_at IS NULL);
-- 4. 其余直连写操作默认不开放,管理端统一走 SECURITY DEFINER RPC