-- ===================================================================================== -- Schema: 权限管理 (RBAC) 核心表 -- 位置:docs/sql/10_schema/user/ak_auth_system_v1.sql -- 对象类型:TABLE -- 版本:v1 -- 说明:包含角色表、权限/菜单表及用户角色关联表 -- ===================================================================================== -- 1. 角色表 CREATE TABLE IF NOT EXISTS public.ak_roles ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), name TEXT NOT NULL UNIQUE, -- 角色名称 (如: 超级管理员) code TEXT NOT NULL UNIQUE, -- 角色编码 (如: super_admin) description TEXT, -- 角色描述 is_active BOOLEAN NOT NULL DEFAULT TRUE, created_at TIMESTAMPTZ NOT NULL DEFAULT now(), updated_at TIMESTAMPTZ NOT NULL DEFAULT now() ); -- 2. 权限/菜单表 CREATE TABLE IF NOT EXISTS public.ak_permissions ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), parent_id UUID REFERENCES public.ak_permissions(id) ON DELETE CASCADE, name TEXT NOT NULL, -- 权限/菜单名称 code TEXT NOT NULL UNIQUE, -- 权限编码 (如: order_view) type TEXT NOT NULL, -- 类型: menu(菜单), button(按钮/接口) path TEXT, -- 前端路由路径 (仅针对 menu) icon TEXT, -- 图标 sort_order INTEGER DEFAULT 0, -- 排序 is_visible BOOLEAN DEFAULT TRUE, -- 菜单是否在左侧可见 created_at TIMESTAMPTZ NOT NULL DEFAULT now(), updated_at TIMESTAMPTZ NOT NULL DEFAULT now() ); -- 3. 用户-角色关联表 -- 映射管理员 (ak_users) 与角色 CREATE TABLE IF NOT EXISTS public.ak_admin_roles ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), user_id UUID NOT NULL REFERENCES public.ak_users(id) ON DELETE CASCADE, role_id UUID NOT NULL REFERENCES public.ak_roles(id) ON DELETE CASCADE, assigned_at TIMESTAMPTZ NOT NULL DEFAULT now(), assigned_by UUID REFERENCES public.ak_users(id), UNIQUE(user_id, role_id) ); -- 4. 角色-权限关联表 CREATE TABLE IF NOT EXISTS public.ak_role_permissions ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), role_id UUID NOT NULL REFERENCES public.ak_roles(id) ON DELETE CASCADE, permission_id UUID NOT NULL REFERENCES public.ak_permissions(id) ON DELETE CASCADE, UNIQUE(role_id, permission_id) ); -- 索引 CREATE INDEX IF NOT EXISTS idx_permissions_parent_id ON public.ak_permissions(parent_id); CREATE INDEX IF NOT EXISTS idx_admin_roles_user_id ON public.ak_admin_roles(user_id); CREATE INDEX IF NOT EXISTS idx_role_permissions_role_id ON public.ak_role_permissions(role_id); -- 注释 COMMENT ON TABLE public.ak_roles IS '后台管理角色表'; COMMENT ON TABLE public.ak_permissions IS '功能权限与菜单定义表'; COMMENT ON TABLE public.ak_admin_roles IS '管理员角色分配表'; COMMENT ON TABLE public.ak_role_permissions IS '角色权限映射表';