程式資訊
- 程式 ID:
PermissionSetting - 所屬子系統:Other
- 狀態:stable
批次權限設定¶
功能簡介¶
「批次權限設定」(程式類別 PermissionSetting)是一支批次編輯彈窗,用來把單一支程式(類別名稱/ProgramClass)的權限,一次套用到全部使用者。它不是從主選單獨立開啟的程式,而是從 使用者權限設定(SECRET,A-010)的明細網格工具列、按 批次設定(明細擴充功能 ExtendedFunction1)後,以 ShowContentWindow 開出的子彈窗。
兩支程式的視角剛好相反:
- 使用者權限設定是以使用者為主軸——開一位使用者,逐支程式調權限。
- 本頁是以程式為主軸——指定一支程式,把全部使用者對它的權限攤平成一張表,逐列勾改後一次存回。
適合系統管理員在「新上線一支程式、要替所有人開瀏覽權」或「某支程式要全面收回列印權」這類跨使用者一次調整的場景使用。
與「放行碼資料檢視」不要混淆
本頁的程式類別雖名為 PermissionSetting,但它做的是程式權限矩陣的批次設定。系統內另有一支 放行碼資料檢視(ZPERMIT)是並行鎖定(PassNumber)的檢視表,與權限無關,兩者用途完全不同。
前置需求¶
- 權限:本彈窗依附於 使用者權限設定(
SECRET,A-010),需具備該程式的瀏覽/修改權限才能開啟並存回。實務上只有系統管理員會持有。 - 管理員身分:彈窗左上的「其他功能描述」清單只有具管理員身分(
Context.User.IsAdmin())的使用者才能編輯(DescriptionIsEnabled);一般使用者僅能檢視。 - 基礎資料:要批次設定的資料完整度,取決於下列主檔——
| 資料 | 影響什麼 |
|---|---|
程式選單(功能表 _menum) |
輸入類別名稱後反查程式名稱(GetProgramName),帶入畫面上的說明 |
使用者權限主檔(SECRET) |
查詢(DARB_BD_SECRET)撈出的就是各使用者對該程式既有的權限列 |
| 程式內欄位定義 | 除外欄位/隱藏欄位/特修改欄位要填欄位的綁定名稱,控管才會對到欄位 |
操作步驟¶
本彈窗的進入點固定在 使用者權限設定 的明細網格:
- 開啟 使用者權限設定,在下方程式權限明細網格點選一列程式(即你要批次設定的那支程式)。
- 按明細工具列的
批次設定(擴充功能ExtendedFunction1),系統開出本彈窗,並把剛才那列的序號/類別名稱/說明事項帶進來。
選擇編輯模式¶
- 在彈窗左上選
新增或修改:- 帶入的序號(
LineNo_)不為空時,系統會自動切到修改模式。 新增:用來替「目前 SECRET 序號」對應的那批使用者建立一支新程式的權限列。修改:對指定類別名稱已存在的權限列做批次調整。
- 帶入的序號(
輸入序號與類別名稱¶
- 確認或輸入 序號 與 類別名稱(要批次設定的程式 ProgramClass)。
- 輸入或修改類別名稱時,系統會即時呼叫
GetProgramName反查該程式的程式名稱並帶入說明(背後讀_menum功能表)。
先設定批次套用的控管值¶
- (視需要)在左上兩張小網格填好要整批套用的內容:左上「其他功能描述」清單與右上「欄位控管」四列(修改方式/除外欄位/隱藏欄位/特修改欄位)。這兩組值會在下一步按
查詢撈完資料的當下自動寫回所有使用者列(見欄位連動與附加功能),所以要在按查詢之前填好。
查詢全部使用者¶
-
按
查詢:系統呼叫DARB_BD_SECRET取出全部使用者對該程式的權限列,攤平顯示在下方的批次網格(每一列是一位使用者)。新增模式以「目前登入者在SECRET程式的序號」為查詢條件。修改模式以「類別名稱=輸入的程式」為查詢條件。
查詢與編輯態互斥
查詢鈕與下方網格的可編輯狀態是互相切換的(SetControl事件同時翻轉QueryEnabled與DgIsReadOnly)。一旦查到資料、進入批次編輯態,查詢鈕會被鎖住,避免你在編輯途中又重撈覆蓋掉手上的修改。要重查請先取消。
逐列勾改並存回¶
- 在批次網格逐列勾選/取消各使用者的權限方塊(可否瀏覽/明細/新增/修改/刪除/查歷史/列印/審核/流程/附件/其他 1~8/Excel/Pivot/Mail/看單價)。
- 存檔(透過彈窗底部的
SqlEditTurn工具列存回)。存檔成功後關閉彈窗,主畫面 使用者權限設定 會自動重新整理(DataNavigateHelper.Renew)。
取消會釋放鎖定
若按取消(AfterCancel),系統會清掉這次批次撈出的資料(PrgsctBatch = null)並釋放放行碼鎖定,不會留下半套狀態。
欄位說明¶
上方:編輯模式與程式識別¶
| 欄位 | 必填 | 說明/格式/預設 |
|---|---|---|
新增/修改(EditType) |
✔ | 單選;帶入序號不為空時預設為 修改 |
序號(LineNo_) |
✔ | 要批次設定的程式在 SECRET 中的序號;新增 模式存檔前不可空白 |
類別名稱(EditProgramClass) |
✔ | 程式的 ProgramClass;新增 模式存檔前不可空白;輸入後自動反查程式名稱 |
左上小網格:其他功能描述(Secret1)¶
| 欄位 | 可編輯 | 說明 |
|---|---|---|
| 編號 | — | 1~36,對應該程式的 36 個 Other Function 槽位 |
| 其他功能描述 | 僅管理員 | 該擴充功能的描述文字(只有 IsAdmin 可改) |
| 顯示說明 | — | 描述依使用者語言翻譯後的顯示文字(唯讀) |
右上小網格:欄位控管(Secret2)¶
| 欄位 | 可編輯 | 說明 |
|---|---|---|
| 序號 | — | 固定 01~04(唯讀) |
| 項目 | — | 依語言翻譯顯示的項目名(修改方式/除外欄位/隱藏欄位/特修改欄位) |
| 內容 | ✔ | 要統一套用的值;按 查詢 撈完資料的當下寫回查出的每一列 |
下方批次網格:各使用者 × 權限(PrgsctBatch)¶
每一列是一位使用者對該程式的權限。
| 欄位 | 可編輯 | 說明 |
|---|---|---|
| 使用者代號/使用者姓名 | — | 該列所屬使用者(唯讀) |
| 序號/說明事項/顯示說明/類別名稱 | — | 程式識別(唯讀) |
| 可否瀏覽/明細/新增/修改/刪除 | ✔ | 基本 CRUD 與檢視權限(勾選方塊) |
| 可否查歷史/列印/審核/流程/附件 | ✔ | 查修改歷史、列印、審核、走流程、開附件 |
| 可否其他 1~8 | ✔ | 各程式自訂的擴充功能開關(批次網格實際只顯示 1~8 欄);勾選方塊上的文字即「其他N說明」 |
| Excel/Pivot/Mail/可否看單價 | ✔ | 匯出 Excel、樞紐分析、寄信、檢視單價 |
| 其他權限/備註/其他說明 | ✔ | 補充用文字欄 |
| 我的最愛 1~7 | ✔ | 把此程式設為使用者主畫面捷徑 |
| 修改方式 | ✔ | 欄位修改模式;Source 預設 ALL |
| 除外欄位/隱藏欄位/特修改方式 | ✔ | 欄位層級控管(綁定名稱清單/規則) |
預設值來源
每一列的修改方式預設值是 ALL(由 Twork_sys_vw_prgsct1Source 建構式直接設定),代表「除『除外欄位』外的欄位都可改」。其餘權限旗標的初值來自 DARB_BD_SECRET 撈回的既有設定。
欄位連動與附加功能¶
這一節把「輸入某欄位或按某按鈕後,系統實際會做什麼」逐條列出,全部來自程式碼。
從 SECRET 帶入起始資料¶
彈窗由 SecretViewModel.ExtendedFunction1 用 new PermissionSettingViewModel(Context, item) 建立,建構時若帶進一筆明細列(prgsct),會:
- 把該列的序號填入
LineNo_、類別名稱填入EditProgramClass、說明事項填入Description; - 呼叫
SetTempOtherFunction建出該程式的 36 個 Other Function,顯示在左上「其他功能描述」清單; - 組出右上「欄位控管」四列(修改方式/除外欄位/隱藏欄位/特修改欄位),各列的項目名稱依使用者語言翻譯顯示;
- 因為序號不為空,自動切到
修改模式。
輸入「類別名稱」→ 即時反查程式名稱¶
當你修改類別名稱(EditProgramClass)時,setter 會立刻呼叫 SecretBll.GetProgramName,以 類別名稱 = 輸入值 到功能表 _menum 查出程式名稱並寫回 Description。換言之,打對的 ProgramClass 會即時帶出程式中文名;打錯則查不到、說明留空。
「其他功能描述」只有管理員能改¶
左上小網格(Secret1)的可編輯狀態綁 DescriptionIsEnabled,而該旗標只有在 Context.User.IsAdmin() 為真時才設為 true。因此一般使用者開彈窗時,「其他功能描述」欄是鎖住的,只能看不能改;管理員才可改各擴充功能的描述文字。
按「查詢」→ 撈出全部使用者並進入編輯態¶
按 查詢(QueryCommand)會:
- 觸發
SqlEditTurnViewModel.TransferQuery(),內部走BatchEditBll:先取放行碼鎖定,再執行SqlQuery。 SqlQuery呼叫預存程序DARB_BD_SECRET撈資料,查詢條件依模式不同:- 新增:以「目前登入者在
SECRET程式的序號」為條件(B.序號 = 登入者序號)。 - 修改:以「類別名稱=輸入的程式」為條件(
B.類別名稱 = 程式)。
- 新增:以「目前登入者在
- 把撈回的列灌進批次網格(
PrgsctBatch)。其中新增模式會預先把每列的序號/類別名稱/說明事項設成畫面上的值、標記為新增(增刪修=A、IsDirty),確保即使你沒再動任何方塊,存檔也撈得到這些列。
同時 SetControl 事件會翻轉 QueryEnabled(鎖住查詢鈕)與 DgIsReadOnly(解鎖批次網格),讓你開始勾改。
「欄位控管」四列會統一寫回所有列¶
按 查詢 的當下(WhenSqlQueryTrue → EditTypeIsEdit 流程,於撈完資料後立即執行),系統會把右上「欄位控管」小網格的四列內容,統一寫回批次網格的每一列:
- 第 01 列的內容 → 每列的修改方式
- 第 02 列的內容 → 每列的除外欄位
- 第 03 列的內容 → 每列的隱藏欄位
- 第 04 列的內容 → 每列的特修改欄位(程式內部欄位為
特修改欄位)
也就是說,這四個欄位層級控管設定是整批套用的——你在按 查詢 前先填好一次,全部使用者跟著套用同一組規則。其欄位語意(ALL/NONE 模式、除外欄位、隱藏欄位)與 使用者權限設定 主畫面完全一致。
先填控管、再按查詢
這四列的寫回只在 查詢 撈資料當下發生一次(Edit 模式由 WhenSqlQueryTrue 寫、Add 模式由 SqlQuery 寫),不是存檔時才套用。請在按 查詢 之前就把右上「欄位控管」的內容填好。
「其他功能描述」會回寫到擴充欄位¶
左上「其他功能描述」清單的內容,同樣在按 查詢 撈完資料的當下透過 SetDescription 以反射逐筆回寫到每一列對應的其他N說明與顯示說明欄位(依編號對應 其他1說明~其他36說明、DisplayDescriptionOfExtendedFunction1~…36)。因此管理員在此改一次描述,會套用到這次批次撈出的所有使用者列。
存檔(SqlEditTurn 工具列)做的事¶
存檔走 BatchEditBll.Save:
AllowSave檢核——新增模式要求序號與類別名稱都不可空白(否則提示「請先輸入 序號、類別名稱」);修改模式只要求序號不可空白(否則提示「請先輸入序號」)。- 通過後把編輯落地到本機 SQLite(EF ChangeTracker 偵測真正有變動的列標記為 dirty)。
- 再把 dirty 且畫面上看得到的列轉成 XML 上傳主資料庫(
UploadToSql),成功後狀態回到正常。
取消(AfterCancel)¶
按取消會把批次資料清空(PrgsctBatch = null)並由 BatchEditBll.Cancel 釋放放行碼鎖定,避免半套狀態殘留或鎖定卡住其他人。
尚未提供的延伸動作
本彈窗目前不含查詢條件面板、列印、匯出 Excel、轉傳票或簽核等延伸動作;程式碼中沒有對應實作。批次套用的範圍就是「這次 查詢 撈出的那批使用者列」。
常見問題¶
在主選單找不到「批次權限設定」?
這支程式不是從主選單獨立開啟的。請先開 使用者權限設定(A-010),在下方程式權限明細點選一列程式,再按明細工具列的 批次設定 才會開出本彈窗。
輸入類別名稱後,旁邊的程式說明是空白?
說明來自功能表 _menum,以類別名稱反查程式名稱。若留空,多半是類別名稱(ProgramClass)打錯、或該程式未登錄在功能表。請確認輸入的是正確的 ProgramClass 字串。
存檔一直被擋,說要輸入序號/類別名稱?
這是 AllowSave 的檢核:新增模式要求序號與類別名稱都要填;修改模式至少要填序號。請補齊後再存。
「其他功能描述」欄改不動?
該清單只有具管理員身分(IsAdmin)的使用者可編輯;一般使用者僅能檢視。若你需要修改擴充功能描述,請以管理員帳號操作。
查完想重查,卻發現「查詢」鈕變灰?
查詢 與批次網格是互斥狀態——查到資料、進入編輯態後查詢鈕會被鎖住,避免覆蓋你手上的修改。請先取消(會釋放鎖定並清空資料),再重新輸入條件查詢。
設了「除外欄位」,使用者進該程式卻還是能改?
欄位控管的語意與 使用者權限設定 相同:ALL 模式下「除外欄位」=不可改、其餘可改;NONE 模式下「除外欄位」=唯一可改。另外欄位要填正確的綁定名稱(中文屬性名,逗號分隔),填錯不會報錯但控管不生效。本彈窗的四個控管欄是整批套用到所有列的。
相關功能¶
- 使用者權限設定(SECRET) — 本彈窗的進入點與母程式,以使用者為主軸維護權限。
- A.系統資料模組首頁 — 放行碼、密碼權限表列印等系統管理功能。
需補截圖清單
以下截圖待功能 runtime 驗收後補拍(放 docs/Other/images/):
permissionsetting-step1.png— 彈窗全貌(上方新增/修改+序號/類別名稱,左右兩張小網格,下方批次網格)permissionsetting-step2.png— 自 SECRET 明細按批次設定開啟、帶入序號/類別名稱的樣子permissionsetting-step3.png— 按查詢後攤平全部使用者、批次網格進入可勾選態