Dataverse Security Role 權限整理:尤其是 Append / Append To 到底是什麼?
Copyright Notice: This article is an original work licensed under the CC 4.0 BY-NC-ND license.
If you wish to repost this article, please include the original source link and this copyright notice.
Source link: https://v2know.com/article/1359
在 Dataverse 的 Security Role 中,針對每張資料表通常會看到這幾個權限:
Create
Read
Write
Delete
Append
Append To
Assign
Share
前四個比較直觀,真正容易搞混的是:
Append
Append To
Assign
Share
其中最難理解的通常又是 Append / Append To。
1. Create / Read / Write / Delete
這四個基本上就是傳統資料庫的 CRUD。
| 權限 | 意義 | 類似資料庫操作 |
|---|---|---|
| Create | 新增資料 | INSERT |
| Read | 查看資料 | SELECT |
| Write | 修改資料 | UPDATE |
| Delete | 刪除資料 | DELETE |
例如有一張「案件」表:
Create
→ 可以新增案件
Read
→ 可以查看案件
Write
→ 可以修改案件
Delete
→ 可以刪除案件
需要注意:
Create ≠ Write
可以存在:
Create = 有
Write = 無
也就是可以新增資料,但不能修改既有資料。
反過來也可以設定成:
Create = 無
Write = 有
只能修改既有資料,不能新增。
2. Append / Append To 的本質
一開始很容易把 Append 理解成「把某張表的欄位追加進另一張表」。
其實完全不是。
Append / Append To 控制的是:
兩筆 Dataverse Record 能不能建立或變更關聯。
而在 Power Apps / Dataverse 中,最常見的表現方式就是:
Lookup
所以最簡單的理解方式就是:
Append / Append To
≈ Lookup 關聯權限
但更準確地說,是:
控制能不能建立或修改 Relationship,而不是控制 Lookup 控件本身是否存在。
3. Lookup 可以類比成 Foreign Key
例如有兩張表:
案件
----------------
案件ID
案件名
顧客 ← Lookup
以及:
顧客
----------------
顧客ID
顧客名
電話
地址
案件 A:
案件ID = A001
案件名 = 系統開發
顧客 = ABC株式会社
這裡的:
案件.顧客
就是一個 Lookup。
從傳統 SQL 資料庫的角度理解,可以近似看成:
案件
--------------------------------
案件ID | 案件名 | 顧客ID
A001 | 系統開發 | C001
│
│ Foreign Key
▼
顧客
--------------------------------
顧客ID | 顧客名
C001 | ABC株式会社
因此:
Dataverse Lookup 可以近似理解成 Foreign Key。
真正保存的不是把整個顧客資料複製進案件,而是:
這個案件關聯到了顧客 C001
4. 不會把另一張表的欄位複製進來
例如顧客資料:
C001
ABC株式会社
03-1111-1111
東京都...
案件表裡並不是變成:
案件
----------------
案件ID
案件名
顧客名
顧客電話
顧客地址
而是:
案件
----------------
案件ID
案件名
顧客 Lookup ─────→ 顧客 C001
├─ 顧客名
├─ 電話
└─ 地址
也就是:
案件只是保存「我指向哪一筆顧客」。
如果 Power Apps 顯示:
ThisItem.顧客.顧客名
本質上是沿著 Lookup 關聯,到顧客表讀取對方的欄位。
不是把顧客名複製到了案件表。
5. Append 到底是什麼?
假設:
案件.顧客 → 顧客
現在要做:
案件 A
顧客 = ABC株式会社
也就是建立:
案件 A ─────────→ ABC株式会社
在這個關係中,可以簡化理解成:
案件
Append
│
│ Lookup Relationship
▼
顧客
Append To
所以:
Append
可以理解成:
這筆 Record 能不能關聯出去。
Append To
可以理解成:
這筆 Record 能不能成為別的 Record 的關聯對象。
因此以前常見的記法:
Append
= 我掛到別人
Append To
= 別人掛到我
雖然方便記,但「掛」這個字本身太抽象。
更清楚的記法是:
Append
= 我能不能建立指向其他 Record 的關聯
Append To
= 我能不能被其他 Record 關聯
6. 最簡單:看到 Append 就想到 Lookup
日常做 Power Apps 時,可以直接先這樣理解:
Append + Append To
→ 能不能設定 / 改變 Lookup 關聯
例如:
案件.顧客 = ABC株式会社
這是在建立:
案件 A ──Lookup──> ABC株式会社
通常就會涉及:
案件 → Append
顧客 → Append To
因此如果發生這種情況:
明明有 Create
明明有 Read
明明有 Write
但是 Lookup 設定或儲存時出現權限錯誤
就應該檢查:
Append
Append To
7. Read 和 Append / Append To 不一樣
還有一個很重要的區別:
Read
和:
Append / Append To
不是同一件事。
可以簡化成:
Read
→ 能不能讀取資料
Append + Append To
→ 能不能建立或改變資料之間的關聯
例如案件本來就已經:
案件 A → ABC株式会社
你只是要讀取這個 Lookup 指向的顧客資料,核心仍然是相應資料表的 Read 權限。
但如果你要把:
案件 A → ABC株式会社
改成:
案件 A → XYZ株式会社
這就是在改變 Lookup 關聯,因此會涉及 Append / Append To。
8. 改 Lookup,不代表修改對方資料
這也是很容易混淆的一點。
例如:
案件 A
顧客 = ABC株式会社
改成:
案件 A
顧客 = XYZ株式会社
這是在修改:
案件的 Lookup
也就是:
CustomerId
C001
↓
C002
並沒有修改:
ABC株式会社
或:
XYZ株式会社
本身的資料。
9. 修改 Lookup 對象本身又是另一回事
假設:
案件
└─ 顧客 → ABC株式会社
畫面上同時顯示:
顧客名:ABC株式会社
電話:03-1111-1111
如果把電話改成:
03-2222-2222
而 Power Apps 實際修改的是顧客表:
顧客
ABC株式会社
電話 = 03-2222-2222
那這時需要的是:
顧客表的 Write
而不是單靠 Append。
所以一定要區分:
案件.顧客 = XYZ株式会社
這是:
修改 Relationship / Lookup
而:
XYZ株式会社.電話 = "03-xxxx"
這是:
修改對方 Record 本身
兩者完全不同。
10. Assign
Assign 是:
改變 Record 的 Owner。
例如:
案件001
Owner = 張さん
改成:
案件001
Owner = 田中さん
這就是 Assign。
因此:
Write
並不等於:
Assign
Write 是修改一般欄位,而 Assign 是:
Owner
張 → 田中
也就是所有權轉移。
這個權限主要對 User / Team-owned Table 有意義。
11. Share
Share 是:
Owner 不變,但是把某筆 Record 的存取權額外分享給其他 User 或 Team。
例如:
案件001
Owner = 張さん
把它 Share 給田中:
案件001
Owner = 張さん
Share
└─ 田中さん
├─ Read
└─ Write
此時:
Owner 仍然是張さん
所以:
Assign
→ Owner 換人
Share
→ Owner 不換,只額外給別人權限
12. 最終記憶表
| 權限 | 最簡單理解 |
|---|---|
| Create | 新增 Record |
| Read | 查看 Record |
| Write | 修改 Record |
| Delete | 刪除 Record |
| Append | 允許這筆 Record 關聯出去 |
| Append To | 允許這筆 Record 被其他 Record 關聯 |
| Assign | 改變 Owner |
| Share | Owner 不變,額外分享權限 |
如果只想記最重要的一句:
Append / Append To
≈ Lookup Relationship 權限
再進一步記成:
Read
→ 能不能看到資料
Write
→ 能不能修改資料內容
Append / Append To
→ 能不能建立或修改 Lookup 關聯
Assign
→ 能不能換 Owner
Share
→ 能不能把這筆資料分享給其他人
總結
Dataverse 的 Security Role 不只是控制:
能不能新增
能不能看
能不能改
能不能刪
它還控制:
Record 之間能不能建立關聯
Owner 能不能轉移
Record 能不能分享
其中 Append / Append To 最容易讓人誤解。
最值得記住的是:
Lookup
≈ Foreign Key 的 Dataverse 表現形式
Append / Append To
≈ 建立或變更 Lookup Relationship 的權限
而它並不是:
把另一張表的欄位複製進本表
也不代表:
修改 Lookup 時會直接修改另一張表的欄位
Lookup 保存的是:
「我指向哪一筆 Record」
而 Append / Append To 控制的,就是這條 Record 之間的關聯能不能被建立或改變。
This article was last edited at