程式資訊
- 程式 ID:
SECRET - 所屬子系統:A.系統資料
- 狀態:stable
使用者權限設定¶
功能簡介¶
「使用者權限設定」(程式代碼 SECRET,A-010)維護系統的使用者帳號,並逐支程式(ProgramClass)設定該使用者可以做的事——能不能瀏覽、新增、修改、刪除、列印、審核、走流程、匯出 Excel、看單價⋯⋯等。它是整個系統權限控管的源頭:使用者一登入,系統就是依本表的設定決定每支程式的工具列按鈕是否可按、明細欄位是否可改、是否隱藏。
本表由系統管理員(通常具 CMSA 超級使用者身分)維護。一筆主檔代表一個使用者,底下的明細網格則是「這位使用者對每一支程式各有哪些權限」。除了 16 項勾選權限外,還能對單支程式設定欄位層級的控管(哪些欄位可改、哪些隱藏)與我的最愛捷徑。
與「程式權限設定」的關係
本表是以使用者為主軸:開一個使用者,調整他在每支程式的權限。若要反過來「以一支程式為主軸、一次調整全部使用者」,請用明細網格上的 批次設定 功能(見欄位連動與附加功能),它會開啟另一支批次編輯程式(PermissionSetting)。
前置需求¶
- 權限:A.系統資料 →
A-010 使用者權限設定的瀏覽 / 新增 / 修改 / 刪除 / 列印權限。實務上只有系統管理員會持有本程式的修改權。 - 基礎資料:
| 資料 | 影響什麼 |
|---|---|
| 人事基本資料(員工檔) | 使用者代號用員工搜尋帶出使用者姓名;勾「連結人事表」後與人事資料連動 |
程式選單(功能表 _menum) |
明細的類別名稱/說明事項對應到實際程式;批次設定輸入類別名稱時用來反查程式名稱 |
| 語言設定 | 語言版本下拉清單(中文/英文等版本),決定該使用者登入後的介面語言 |
| 程式內欄位定義 | 除外欄位/隱藏欄位/特修改欄位要填欄位的綁定名稱,才能對到正確欄位 |
操作步驟¶
新增使用者¶
- 從主選單開啟 A.系統資料 → 使用者權限設定。
-
先瀏覽到一筆既有使用者,再點工具列
新增。新增是用複製產生的
本程式的
新增實際上是 複製(Copy)目前這筆使用者的整份權限設定。若還沒選任何一筆資料就按新增,系統會擋下並提示「請先選擇一筆資料」。建議先找一位權限相近的使用者,複製後再微調,比從零開始勾快。 -
修改使用者代號:在搜尋框輸入或查員工代號,系統會自動帶出使用者姓名。
- 設定語言版本、電腦名稱、連結人事表、使用者備註。
- 在明細網格逐列勾選該使用者對每支程式的權限(見下節欄位)。
- 視需要設定修改方式/除外欄位/隱藏欄位等欄位控管,或設定我的最愛。
- 點工具列
儲存。
修改¶
- 瀏覽到要調整的使用者。
- 點
修改,明細網格的 16 個權限勾選方塊才會變成可編輯(非編輯態下是鎖住的)。 - 直接點勾選方塊切換權限,或修改右側「Other Function」清單的允許狀態。
- 點
儲存。
刪除¶
- 瀏覽到要刪除的使用者。
-
點
刪除。超級使用者不可刪除
若使用者代號是
CMSA(系統超級使用者),刪除會被擋下。這是刻意的保護,避免誤刪導致無人能管理系統。
列印¶
- 瀏覽到要列印的使用者。
- 點
列印,系統開啟列印頁,並自動把起/訖單號都帶成目前這筆使用者代號。 - 確認列印範圍後輸出「密碼權限表」(報表 A010-1)。詳見 密碼權限表列印。
欄位說明¶
主檔(使用者)¶
| 欄位 | 必填 | 說明/格式/預設 |
|---|---|---|
| 使用者代號 | ✔ | 主鍵;用員工搜尋(EmployeeSearch)輸入,會自動帶使用者姓名 |
| 使用者姓名 | ✔ | 儲存時檢查不可空白;輸入使用者代號時自動帶入,亦可手動覆寫 |
| 連結人事表 | — | 是/否下拉;預設空(否) |
| 語言版本 | — | 下拉(中文/英文等),來源 LanguageEnums;決定登入後介面語言 |
| 電腦名稱 | — | 限定登入電腦時可填;預設空 |
| 使用者備註 | — | 自由文字(最長 2000 字) |
| 使用者密碼 | — | 不在畫面上輸入;儲存時由系統呼叫 DARB_GET_PASSWORD 取得後寫回 |
明細(每支程式的權限)¶
每一列是「這位使用者對某一支程式」的權限。前三欄為唯讀的程式識別,其後是 16 個勾選權限與欄位控管設定。
| 欄位 | 可編輯 | 說明 |
|---|---|---|
| 序號/類別名稱/說明事項 | — | 程式識別(唯讀)。類別名稱即 ProgramClass |
| 可否瀏覽/明細/新增/複製/修改/刪除 | ✔ | 基本 CRUD 與檢視權限 |
| 可否查歷史/列印/流程 | ✔ | 查修改歷史、列印報表、走簽核流程 |
| 可否 xls/pivot/mail/看單價/附件 | ✔ | 匯出 Excel、樞紐分析、寄信、檢視單價、開啟附件 |
| 可否審核/自動審核 | ✔ | 執行審核、自動審核 |
| 其他權限/備註/其他說明 | ✔ | 補充用文字欄 |
| 我的最愛 1~6 | ✔ | 把此程式設為使用者主畫面捷徑(6 個欄位) |
| 修改方式 | ✔ | 欄位修改模式;預設 ALL,儲存時自動轉大寫(見下節) |
| 除外欄位/隱藏欄位 | ✔ | 以逗號分隔的欄位綁定名稱清單 |
| 特殊修改方式/特殊修改欄位 | ✔ | 針對特定欄位的另一組修改規則 |
勾選方塊只能在編輯態操作
明細的 16 個權限勾選方塊,只有進入新增/修改狀態(AdeViewModel.Status != Normal)後才可勾選;單純瀏覽時是鎖住的。
右側「Other Function」次明細¶
選取明細某一列後,右側網格列出該程式的 36 個 Other Function(每支程式可自訂的額外功能開關),欄位有編號、說明事項(依使用者語言翻譯顯示)、是否允許(勾選)。
欄位連動與附加功能¶
這一節說明「輸入某欄位或按某功能後,系統實際會做什麼」。
輸入使用者代號 → 自動帶姓名¶
當你在使用者代號搜尋框輸入或選取員工,系統會透過 DescriptionHelper.GetEmployeeName 反查員工姓名,若查得到就自動填入使用者姓名。姓名是儲存時的必填欄位,所以這個自動帶值能省去手key。若該代號查不到對應員工(例如非人事檔員工),姓名不會被帶入,需自行輸入。
切換明細列 → 載入該程式的 36 個 Other Function¶
明細網格是逐列「延後計算」的:只有當你點選某一列時,系統才會替那一列建立 36 個 Other Function 物件(SetTempOtherFunction)並顯示在右側網格。這是刻意的效能設計——避免一次為全部程式列建立 36 × N 個物件。因此右側清單會隨你選取的明細列即時切換。
新增一列明細時(SetNewData),系統也會立即替它建好這 36 個 Other Function。
儲存(儲存)時系統做的事¶
按 儲存 時,HandleDataBeforeEndEdit 會依序處理:
- 取密碼:以使用者代號呼叫
DARB_GET_PASSWORD取得密碼,寫回使用者密碼欄位。 - 修改方式轉大寫:每一列明細的修改方式一律
ToUpper()(所以填all或none都會被正規化成ALL/NONE)。 - 回寫 Other Function:把右側 36 個 Other Function 的勾選與描述,逐筆寫回明細列對應的擴充功能欄位(
SetOtherFunctionPermission,依編號反射回寫允許狀態與描述)。
存檔前的檢核(AllowSave):使用者姓名不可空白,否則跳出輸入提示並中止存檔。
修改方式 / 除外欄位 / 隱藏欄位 / 特修改方式(欄位層級控管)¶
這四個欄位不是擺好看的——它們直接驅動該使用者進入對應程式後的欄位可改/隱藏行為(由 FieldControlHelper 解讀):
- 修改方式 =
ALL(或留空):除「除外欄位」以外的欄位都可改。這是預設值。 - 修改方式 =
NONE:反過來,只有「除外欄位」清單裡的欄位可改,其餘鎖住。 - 除外欄位:以逗號分隔的欄位綁定名稱。在
ALL模式下=不可改的欄位;在NONE模式下=唯一可改的欄位。 - 隱藏欄位:清單內的欄位在該程式直接隱藏不顯示。
- 特殊修改方式/特殊修改欄位:對「特修改欄位」清單套用另一組規則,作為一般修改方式之外的補充控管。
小技巧
欄位名稱要填程式內欄位的綁定名稱(中文屬性名),多個用逗號隔開,系統會自動去除空白再比對。填錯名稱不會報錯,只是該欄位的控管不會生效。
批次設定(明細工具列的擴充功能 ExtendedFunction1)¶
明細網格提供一個批次設定入口(對應 ExtendedFunction1)。觸發後,系統會以目前選取的明細列開啟 PermissionSetting 批次編輯彈窗(ContentWindowService.ShowContentWindow),讓你:
- 選
新增或修改模式。 - 輸入序號與類別名稱(要批次設定的程式)。
- 按
查詢:系統呼叫DARB_BD_SECRET撈出全部使用者對該程式的權限列,一次顯示在批次網格。 - 直接在批次網格逐列調整權限,並可統一套用同一組修改方式/除外欄位/隱藏欄位/特修改欄位。
- 存檔後關閉彈窗,主畫面會重新整理(
DataNavigateHelper.Renew)。
這就是「以程式為主軸、一次改全部使用者」的途徑,與主畫面「以使用者為主軸」互補。
Other Function 描述只有管理員能改
批次彈窗裡的「其他功能描述」清單,只有具管理員身分(IsAdmin)的使用者才可編輯;一般使用者僅能檢視。
列印來源(IPrintViewModel / IPrintSource)¶
按 列印 時呼叫 GetPrintViewModel,建立 SecretPrintViewModel 並把起/訖單號都預設成目前使用者代號。列印頁要求起訖單號都不可空白才有資料(HaveReportData),輸出報表為「密碼權限表(A010-1)」。
CPUID 功能目前未開放
程式碼保留了一個 GetCPUExecute(抓本機 CPU 識別碼寫入 cpuid 欄位)與對應按鈕,但相關 UI 在畫面上已整段註解隱藏,目前不提供此操作。
常見問題¶
按「新增」卻跳出「請先選擇一筆資料」?
本程式的新增是用複製目前資料產生的,所以必須先瀏覽到一筆既有使用者,再按 新增。請先用瀏覽/查詢找到一位權限相近的使用者當範本。
儲存時一直被擋,說要輸入資料?
使用者姓名是存檔必填欄位。若輸入使用者代號後沒自動帶出姓名(例如該代號不在人事檔),請手動補上姓名再存。
刪除某個帳號失敗?
若該帳號是 CMSA 超級使用者,系統會擋下刪除,這是保護機制。一般使用者帳號不受此限。
明細的權限勾選方塊點不動?
勾選方塊只有在新增/修改狀態下才可操作。請先按 修改 進入編輯態,再勾選;單純瀏覽時方塊是鎖住的。
設了「除外欄位」,使用者進該程式卻還是能改?
請確認修改方式與除外欄位的搭配:ALL 模式下除外欄位=不可改、其餘可改;NONE 模式下除外欄位=唯一可改。另外欄位名稱要填正確的綁定名稱(中文屬性名,逗號分隔),填錯名稱控管不會生效。
右側 Other Function 清單沒東西?
Other Function 是選取明細列後才載入的。請先在左側明細網格點一列程式,右側才會帶出該程式的 36 個 Other Function。
相關功能¶
需補截圖清單
以下截圖待功能 runtime 驗收後補拍(放 docs/A-System/images/):
secret-step1.png— 主畫面全貌(上方使用者主檔 + 下方程式權限明細 + 右側 Other Function)secret-step2.png— 明細網格進入修改態、權限勾選方塊可勾選的樣子secret-step3.png— 欄位控管欄(修改方式/除外欄位/隱藏欄位)填寫範例secret-step4.png—批次設定彈窗(PermissionSetting,以程式為主軸批次調整全部使用者)