跳轉到

程式資訊

  • 程式 IDSECRET
  • 所屬子系統:A.系統資料
  • 狀態:stable

使用者權限設定

功能簡介

「使用者權限設定」(程式代碼 SECRET,A-010)維護系統的使用者帳號,並逐支程式(ProgramClass)設定該使用者可以做的事——能不能瀏覽、新增、修改、刪除、列印、審核、走流程、匯出 Excel、看單價⋯⋯等。它是整個系統權限控管的源頭:使用者一登入,系統就是依本表的設定決定每支程式的工具列按鈕是否可按、明細欄位是否可改、是否隱藏。

本表由系統管理員(通常具 CMSA 超級使用者身分)維護。一筆主檔代表一個使用者,底下的明細網格則是「這位使用者對每一支程式各有哪些權限」。除了 16 項勾選權限外,還能對單支程式設定欄位層級的控管(哪些欄位可改、哪些隱藏)與我的最愛捷徑。

與「程式權限設定」的關係

本表是以使用者為主軸:開一個使用者,調整他在每支程式的權限。若要反過來「以一支程式為主軸、一次調整全部使用者」,請用明細網格上的 批次設定 功能(見欄位連動與附加功能),它會開啟另一支批次編輯程式(PermissionSetting)。

前置需求

  • 權限:A.系統資料 → A-010 使用者權限設定 的瀏覽 / 新增 / 修改 / 刪除 / 列印權限。實務上只有系統管理員會持有本程式的修改權。
  • 基礎資料
資料 影響什麼
人事基本資料(員工檔) 使用者代號用員工搜尋帶出使用者姓名;勾「連結人事表」後與人事資料連動
程式選單(功能表 _menum 明細的類別名稱/說明事項對應到實際程式;批次設定輸入類別名稱時用來反查程式名稱
語言設定 語言版本下拉清單(中文/英文等版本),決定該使用者登入後的介面語言
程式內欄位定義 除外欄位/隱藏欄位/特修改欄位要填欄位的綁定名稱,才能對到正確欄位

操作步驟

新增使用者

  1. 從主選單開啟 A.系統資料 → 使用者權限設定。
  2. 瀏覽到一筆既有使用者,再點工具列 新增

    新增是用複製產生的

    本程式的 新增 實際上是 複製(Copy)目前這筆使用者的整份權限設定。若還沒選任何一筆資料就按新增,系統會擋下並提示「請先選擇一筆資料」。建議先找一位權限相近的使用者,複製後再微調,比從零開始勾快。

  3. 修改使用者代號:在搜尋框輸入或查員工代號,系統會自動帶出使用者姓名

  4. 設定語言版本電腦名稱連結人事表使用者備註
  5. 在明細網格逐列勾選該使用者對每支程式的權限(見下節欄位)。
  6. 視需要設定修改方式/除外欄位/隱藏欄位等欄位控管,或設定我的最愛
  7. 點工具列 儲存

修改

  1. 瀏覽到要調整的使用者。
  2. 修改,明細網格的 16 個權限勾選方塊才會變成可編輯(非編輯態下是鎖住的)。
  3. 直接點勾選方塊切換權限,或修改右側「Other Function」清單的允許狀態。
  4. 儲存

刪除

  1. 瀏覽到要刪除的使用者。
  2. 刪除

    超級使用者不可刪除

    若使用者代號是 CMSA(系統超級使用者),刪除會被擋下。這是刻意的保護,避免誤刪導致無人能管理系統。

列印

  1. 瀏覽到要列印的使用者。
  2. 列印,系統開啟列印頁,並自動把起/訖單號都帶成目前這筆使用者代號。
  3. 確認列印範圍後輸出「密碼權限表」(報表 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 會依序處理:

  1. 取密碼:以使用者代號呼叫 DARB_GET_PASSWORD 取得密碼,寫回使用者密碼欄位。
  2. 修改方式轉大寫:每一列明細的修改方式一律 ToUpper()(所以填 allnone 都會被正規化成 ALLNONE)。
  3. 回寫 Other Function:把右側 36 個 Other Function 的勾選與描述,逐筆寫回明細列對應的擴充功能欄位(SetOtherFunctionPermission,依編號反射回寫允許狀態與描述)。

存檔前的檢核(AllowSave):使用者姓名不可空白,否則跳出輸入提示並中止存檔。

修改方式 / 除外欄位 / 隱藏欄位 / 特修改方式(欄位層級控管)

這四個欄位不是擺好看的——它們直接驅動該使用者進入對應程式後的欄位可改/隱藏行為(由 FieldControlHelper 解讀):

  • 修改方式 = ALL(或留空):除「除外欄位」以外的欄位都可改。這是預設值。
  • 修改方式 = NONE:反過來,只有「除外欄位」清單裡的欄位可改,其餘鎖住。
  • 除外欄位:以逗號分隔的欄位綁定名稱。在 ALL 模式下=不可改的欄位;在 NONE 模式下=唯一可改的欄位。
  • 隱藏欄位:清單內的欄位在該程式直接隱藏不顯示。
  • 特殊修改方式/特殊修改欄位:對「特修改欄位」清單套用另一組規則,作為一般修改方式之外的補充控管。

小技巧

欄位名稱要填程式內欄位的綁定名稱(中文屬性名),多個用逗號隔開,系統會自動去除空白再比對。填錯名稱不會報錯,只是該欄位的控管不會生效。

批次設定(明細工具列的擴充功能 ExtendedFunction1

明細網格提供一個批次設定入口(對應 ExtendedFunction1)。觸發後,系統會以目前選取的明細列開啟 PermissionSetting 批次編輯彈窗ContentWindowService.ShowContentWindow),讓你:

  1. 新增修改 模式。
  2. 輸入序號類別名稱(要批次設定的程式)。
  3. 查詢:系統呼叫 DARB_BD_SECRET 撈出全部使用者對該程式的權限列,一次顯示在批次網格。
  4. 直接在批次網格逐列調整權限,並可統一套用同一組修改方式/除外欄位/隱藏欄位/特修改欄位
  5. 存檔後關閉彈窗,主畫面會重新整理(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/):

  1. secret-step1.png — 主畫面全貌(上方使用者主檔 + 下方程式權限明細 + 右側 Other Function)
  2. secret-step2.png — 明細網格進入修改態、權限勾選方塊可勾選的樣子
  3. secret-step3.png — 欄位控管欄(修改方式/除外欄位/隱藏欄位)填寫範例
  4. secret-step4.png批次設定 彈窗(PermissionSetting,以程式為主軸批次調整全部使用者)