在開發 AppSheet 應用程式時,我們經常需要根據不同使用者的角色或權限,來決定他們能看到哪些畫面(View)。例如,管理人員可能需要看到「員工資料」和「進貨記錄」,而一般員工只能看到「銷售記錄」。
本文將教您如何利用一個「權限資料表」,搭配 LOOKUP() 函數,來動態控制每個使用者能看到的 View,實現精細的權限管理。
核心概念
我們將在後端的 Google Sheets 中建立一個「員工」資料表,用來定義每位使用者的權限。然後,在 AppSheet 中,針對每一個需要控制的 View,在其 Show if 顯示條件中設定 LOOKUP() 公式,讓 AppSheet 自動去查詢該使用者是否有權限查看此 View。
步驟一:準備權限資料表
首先,在您的 Google Sheets 中,建立一個用於管理權限的資料表,我們可以命名為「員工」。
這個資料表的結構需要包含:
使用者唯一識別欄位:通常使用「電子郵件」,因為這可以與 AppSheet 的 USEREMAIL() 函數對應。
各 View 的權限欄位:為每一個您想控制的 View 建立一個對應的欄位。欄位名稱最好與 View 的名稱完全相同,以方便管理。這些欄位的值應為 TRUE(允許查看)或 FALSE(禁止查看)。
範例如下:
在這個範例中:
imingho@gmail.com 可以看到所有三個 View。
stock0331@gmail.com 無法看到「銷售記錄」這個 View。
步驟二:設定 View 的顯示條件 (Show if)
接下來,我們回到 AppSheet 編輯器,為需要控制的 View 設定顯示公式。
在左側導覽列點擊 UX。
在 Views 清單中,選擇您要設定權限的 View(例如「進貨記錄View」)。
在右側的設定面板中,找到並展開 Display 區塊。
找到 Show if 屬性,這就是我們要填寫公式的地方。
步驟三:撰寫 LOOKUP 公式
Show if 屬性會根據公式回傳的 TRUE 或 FALSE 值來決定是否顯示該 View。我們將使用 LOOKUP() 函數來達成此目的。
LOOKUP() 函數的語法如下:
LOOKUP(要尋找的值, 要在哪個資料表尋找, 要比對哪個欄位, 要回傳哪個欄位的值)
針對我們的「進貨記錄View」,在 Show if 欄位中填入以下公式:
lookup(USEREMAIL(), "員工", "電子郵件", "進貨記錄View")
讓我們來分解這個公式:
USEREMAIL():這是一個內建函數,會取得當前登入 AppSheet 使用者的電子郵件。這就是我們要尋找的值。
"員工":我們要查詢的資料表名稱。
"電子郵件":在「員工」表中,我們要用來比對 USEREMAIL() 的欄位。
"進貨記錄View":當找到符合的電子郵件後,我們要從該列回傳其「進貨記錄View」欄位的值(即 TRUE 或 FALSE)。
公式的運作邏輯:
AppSheet 會拿當前使用者的 Email,去「員工」資料表的「電子郵件」欄位中尋找符合的紀錄。一旦找到,便會回傳該紀錄中「進貨記錄View」欄位的值。如果回傳的是 TRUE,此 View 就會顯示;反之則會被隱藏。
步驟四:應用到其他 View
您可以將同樣的邏輯應用到其他需要權限控制的 View。例如,要設定「銷售記錄」View 的權限,只需將公式的最後一個參數改為對應的欄位名稱即可:
lookup(USEREMAIL(), "員工", "電子郵件", "銷售記錄")
成果與演練
設定完成後,儲存您的變更。現在,您可以透過更改「員工」資料表中的 TRUE/FALSE 值來即時控制使用者的權限。
例如,當我們將 stock0331@gmail.com 使用者的「銷售記錄」權限設為 FALSE 時:
修改前: 該使用者可以看到「銷售記錄」View。
修改後: 在 App 重新同步(Sync)資料後,「銷售記錄」View 就會從該使用者的介面上消失。
沒有留言:
張貼留言
注意:只有此網誌的成員可以留言。