P/
PromptTools
選單
資產庫
指令組合
產生指令包
管理資料
Skill asset
編輯 Skill
Skill 是完整資料夾資產;建立後可逐一加入腳本、參考文件、範本、圖片與子資料夾。
Skill 名稱
唯一代稱
簡短說明
主要分類
未分類
標籤
SKILL.md
五種工具預設適用
--- name: pms-cross description: PMS 權限管理系統 — 新網站快速權限建置技能。協助生成 Sybase ASE SQL,完成五步驟:新增系統代碼、新增程式清單、建立角色、角色綁定程式、員工綁定角色。適用於 ASP.NET Web Forms + Sybase ASE 架構的 PMS 專案。 --- # PMS 新網站快速權限建置 (pms-cross) ## 技能用途 當使用者需要替一個新網站在 PMS 權限管理系統中完成初始化設定時,使用此技能逐步產生 Sybase ASE SQL,對應以下五個操作頁面: 1. `permissionSys.aspx` — 新增系統代碼並啟用 2. `permissionApploc.aspx` — 新增所有網頁功能(程式) 3. `permissionRoles.aspx` — 建立角色 4. `crossRoleApp.aspx` — 角色綁定程式(設定權限旗標) 5. `crossRoleEmp.aspx` — 員工綁定角色 ## 資料庫架構快速參考 ### 核心資料表 | 資料表 | 主鍵 | 用途 | |--------|------|------| | `pms_sys_m` | `sysid` (char) | 系統主檔 | | `pms_AP` | `APSID` (identity int) | 程式/功能頁面 | | `pms_Roles` | `RoleSID` (identity int) | 角色定義 | | `pms_RoleAuthority` | `RoleSID + APSID` | 角色對應程式及權限 | | `pms_EmpAuthority` | `EmpID + RoleSID` | 員工對應角色 | ### 重要欄位說明 **pms_sys_m** - `sysid`: 系統代碼(char,最多 10 碼,全小寫英數) - `state`: `'Y'`=啟用 / `'N'`=停用 - `defaultrole`: 預設角色 RoleSID(可 NULL,建完角色後 UPDATE) - `begindate`: 啟用日期(不可 NULL) **pms_AP** - `APSID`: 自動流水號(IDENTITY),Sybase 用 `@@IDENTITY` 取得 - `SysID`: 對應 pms_sys_m.sysid - `APState`: `'Y'`=啟用 - `ParentSID`: 父層 APSID(NULL = 頂層選單) - `DisplayFlag`: `1`=顯示在導覽列 / `0`=隱藏 - `APTarget`: `'_self'` | `'_blank'` - `ExtraFun`: 額外功能旗標(通常 NULL) **pms_Roles** - `RoleSID`: 自動流水號(IDENTITY) - `RoleState`: `'Y'`=啟用 **pms_RoleAuthority** - `Authority`: 以 `^` 分隔的權限字串,格式:`'Q^查詢^I^新增^U^修改^D^刪除^P^列印'` - 標準權限碼:`Q`查詢、`I`新增、`U`修改、`D`刪除、`P`列印、`E`匯出、`H`人事、`A`核決 **pms_EmpAuthority** - `UserType`: `'E'`=員工(一般情況) --- ## 工作流程 ### Step 1:蒐集使用者資訊 開始前,向使用者確認以下參數: | 參數 | 說明 | 範例 | |------|------|------| | `sysid` | 系統代碼(英數小寫,≤10碼) | `newweb` | | `sysname` | 系統名稱 | `新網站系統` | | `verno` | 版本號 | `1.0` | | `operator` | 操作者員工代碼(data_op) | `A001` | | 程式清單 | 每個功能頁面的 APID/APName/URL/父層 | 見下方範例 | | 角色清單 | 角色ID、角色名稱、對應權限 | 見下方範例 | | 員工清單 | EmpID 對應哪個角色 | 見下方範例 | ### Step 2:產生 SQL 依照以下順序產生,並以 `-- ★ STEP N` 標示各段落。 --- ## SQL 產生範本 ### STEP 1 — 新增系統 (pms_sys_m) ```sql -- ★ STEP 1:新增系統代碼並啟用 INSERT INTO pms_sys_m (sysid, sysname, verno, begindate, enddate, state, sorting, defaultrole, data_dt, data_op) VALUES ( '{sysid}', -- 系統代碼 (char ≤10) '{sysname}', -- 系統名稱 '{verno}', -- 版本號 GETDATE(), -- begindate NULL, -- enddate (NULL=無期限) 'Y', -- state: Y=啟用 10, -- sorting: 排序 NULL, -- defaultrole: 建完 Roles 後再 UPDATE GETDATE(), '{operator}' -- data_op ) -- 驗證 SELECT * FROM pms_sys_m WHERE sysid = '{sysid}' ``` > **Sybase ASE 注意**:`GETDATE()` 是正確語法(與 SQL Server 相同)。 --- ### STEP 2 — 新增程式清單 (pms_AP) ```sql -- ★ STEP 2:新增功能程式清單 -- 頂層選單(ParentSID = NULL) INSERT INTO pms_AP (SysID, APID, APName, APState, ParentSID, APRanking, APUrl, APTarget, DisplayFlag, ExtraFun, Remark, Owner, DataDT, DataOP) VALUES ('{sysid}', '{APID}', '{APName}', 'Y', NULL, 1, '{APUrl}', '_self', 1, NULL, NULL, '{operator}', GETDATE(), '{operator}') -- 取得剛插入的 APSID (同一 connection 內) -- SELECT @@IDENTITY ← Sybase ASE 語法 -- 子功能頁面(ParentSID = 上方取得的 APSID) INSERT INTO pms_AP (SysID, APID, APName, APState, ParentSID, APRanking, APUrl, APTarget, DisplayFlag, ExtraFun, Remark, Owner, DataDT, DataOP) VALUES ('{sysid}', '{APID}', '{APName}', 'Y', {ParentSID}, 1, '{APUrl}', '_self', 1, NULL, NULL, '{operator}', GETDATE(), '{operator}') -- 驗證 SELECT APSID, APID, APName, APUrl, ParentSID FROM pms_AP WHERE SysID = '{sysid}' ORDER BY APSID ``` --- ### STEP 3 — 建立角色 (pms_Roles) ```sql -- ★ STEP 3:建立角色 INSERT INTO pms_Roles (RoleID, RoleName, RoleState, DataDT, DataOP) VALUES ('{RoleID}', '{RoleName}', 'Y', GETDATE(), '{operator}') -- 驗證,記下 RoleSID 供後續使用 SELECT RoleSID, RoleID, RoleName FROM pms_Roles WHERE RoleID LIKE '{sysid_upper}%' ``` **角色 RoleID 命名建議**:`{SYSID大寫}_{角色用途}` → 例如 `NEWWEB_ADMIN`、`NEWWEB_USER`、`NEWWEB_READONLY` --- ### STEP 4 — 角色綁定程式 (pms_RoleAuthority) ```sql -- ★ STEP 4:角色綁定程式並設定權限 -- 管理員:完整權限 → 批次綁定該系統所有程式 INSERT INTO pms_RoleAuthority (RoleSID, APSID, Authority, DataDT, DataOP) SELECT {ADMIN_RoleSID}, APSID, 'Q^查詢^I^新增^U^修改^D^刪除^P^列印', GETDATE(), '{operator}' FROM pms_AP WHERE SysID = '{sysid}' AND APState = 'Y' -- 一般使用者:查詢+新增+修改 INSERT INTO pms_RoleAuthority (RoleSID, APSID, Authority, DataDT, DataOP) SELECT {USER_RoleSID}, APSID, 'Q^查詢^I^新增^U^修改', GETDATE(), '{operator}' FROM pms_AP WHERE SysID = '{sysid}' AND APState = 'Y' -- 唯讀:僅查詢 INSERT INTO pms_RoleAuthority (RoleSID, APSID, Authority, DataDT, DataOP) SELECT {READONLY_RoleSID}, APSID, 'Q^查詢', GETDATE(), '{operator}' FROM pms_AP WHERE SysID = '{sysid}' AND APState = 'Y' -- 驗證 SELECT ra.RoleSID, r.RoleName, ra.APSID, ap.APName, ra.Authority FROM pms_RoleAuthority ra JOIN pms_Roles r ON r.RoleSID = ra.RoleSID JOIN pms_AP ap ON ap.APSID = ra.APSID WHERE r.RoleID LIKE '{sysid_upper}%' ORDER BY ra.RoleSID, ra.APSID ``` --- ### STEP 5 — 員工綁定角色 (pms_EmpAuthority) ```sql -- ★ STEP 5:員工綁定角色 INSERT INTO pms_EmpAuthority (EmpID, RoleSID, UserType, DataDT, DataOP) VALUES ('{EmpID}', {RoleSID}, 'E', GETDATE(), '{operator}') -- 同一員工可綁多個角色(重複 INSERT,RoleSID 不同即可) -- 驗證完整建置結果 SELECT ea.EmpID, r.RoleID, r.RoleName, ap.APID, ap.APName, ra.Authority FROM pms_EmpAuthority ea JOIN pms_Roles r ON r.RoleSID = ea.RoleSID JOIN pms_RoleAuthority ra ON ra.RoleSID = r.RoleSID JOIN pms_AP ap ON ap.APSID = ra.APSID WHERE r.RoleID LIKE '{sysid_upper}%' ORDER BY ea.EmpID, r.RoleSID, ap.APSID ``` --- ### 選用 — 設定系統預設角色 ```sql -- 建完角色後,將 defaultrole 回填到 pms_sys_m UPDATE pms_sys_m SET defaultrole = {READONLY_RoleSID}, -- 通常設為唯讀角色 data_dt = GETDATE(), data_op = '{operator}' WHERE sysid = '{sysid}' ``` --- ## 執行注意事項 1. **Sybase ASE 取 IDENTITY 值**:`SELECT @@IDENTITY` 必須在同一個 Connection 且緊接在 INSERT 之後。 2. **字串編碼**:程式層透過 `Utility.UnicodeTransCP850_2()` 處理中文,但直接執行 SQL 時若 Client 端編碼正確通常不需額外處理。 3. **執行順序**:`pms_sys_m` → `pms_AP` → `pms_Roles` → `pms_RoleAuthority` → `pms_EmpAuthority`(有 FK 依賴)。 4. **Authority 格式**:`^` 分隔,奇數位置為代碼、偶數位置為顯示名稱,例如 `'Q^查詢^I^新增'`。 5. **Rollback 時**:若需整批回滾,先刪 pms_EmpAuthority → pms_RoleAuthority → pms_Roles → pms_AP → pms_sys_m(反向)。 --- ## 互動模式 使用者可用以下方式呼叫此技能: - **「幫我建置新網站權限 SQL」** → 蒐集五步驟所需參數後,一次產生完整 SQL 腳本 - **「只要 STEP 3 和 STEP 4」** → 只產生指定步驟 - **「這個角色要有查詢和匯出權限」** → Authority 設為 `'Q^查詢^E^匯出'` - **「批次綁定這批員工」** → 收到 EmpID 清單後產生多筆 INSERT - **「產生驗證 SQL」** → 產生每個步驟的 SELECT 驗證語句 每次產生 SQL 時,請將 `{佔位符}` 全部替換為使用者提供的實際值,不留任何佔位符。
必須包含 YAML frontmatter 的 name 與 description。
修改說明
保存完整 Skill 版本
取消