2.6 KiB
2.6 KiB
DB Schema(新架構)
1) 設計原則
- 權限以群組為中心,不使用會員直接細粒度授權流程
scope固定為siteaction只允許view、edit(可同時存在)- DB 真實執行來源:
backend/scripts/init_schema.sql
2) 核心實體
companiesid(PK)company_key(UNIQUE)name,status,created_at,updated_at
sitesid(PK)site_key(UNIQUE)company_id(FK -> companies.id)name,status,created_at,updated_at
usersid(PK)authentik_sub(UNIQUE)authentik_user_id,email(UNIQUE),display_name,is_active
systemsid(PK)system_key(UNIQUE)name,status
modulesid(PK)module_key(UNIQUE)system_id(FK -> systems.id)name,status
permission_groupsid(PK)group_key(UNIQUE)name,status
3) 群組關聯(多對多)
permission_group_membersgroup_id(FK -> permission_groups.id)user_id(FK -> users.id)- UNIQUE (
group_id,user_id)
permission_group_sitesgroup_id(FK -> permission_groups.id)site_id(FK -> sites.id)- UNIQUE (
group_id,site_id)
permission_group_systemsgroup_id(FK -> permission_groups.id)system_id(FK -> systems.id)- UNIQUE (
group_id,system_id)
permission_group_modulesgroup_id(FK -> permission_groups.id)module_id(FK -> modules.id)- UNIQUE (
group_id,module_id)
permission_group_actionsgroup_id(FK -> permission_groups.id)action(view|edit)- UNIQUE (
group_id,action)
4) 查詢預期
- 系統頁關聯:
- 查
permission_group_systems取群組 - 經
permission_group_members推導涉及會員
- 查
- 模組頁關聯:
- 查
permission_group_modules取群組 - 經
permission_group_members推導涉及會員
- 查
- 公司頁站台:
- 查
sitesbycompany_id
- 查
- 會員頁群組:
- 查
permission_group_membersbyuser_id
- 查
5) 驗收查核(SQL)
-- 1) 檢查主表是否存在
SELECT tablename
FROM pg_tables
WHERE schemaname = 'public'
AND tablename IN (
'companies','sites','users','systems','modules','permission_groups',
'permission_group_members','permission_group_sites',
'permission_group_systems','permission_group_modules','permission_group_actions'
)
ORDER BY tablename;
-- 2) 檢查 action 值域
SELECT DISTINCT action FROM permission_group_actions ORDER BY action;
-- 3) 檢查群組可同時有 view/edit
SELECT group_id, array_agg(action ORDER BY action) AS actions
FROM permission_group_actions
GROUP BY group_id;