租戶令牌有效負載參考
Meilisearch 的租戶令牌是 JSON Web 令牌 (JWT)。它們的有效負載由三個元素組成:搜尋規則、一個API 金鑰 UID,以及一個可選的到期日。
有效負載範例
{
"exp": 1646756934,
"apiKeyUid": "at5cd97d-5a4b-4226-a868-2d0eb6d197ab",
"searchRules": {
"INDEX_NAME": {
"filter": "attribute = value"
}
}
}
搜尋規則
搜尋規則物件是一組指令,定義 Meilisearch 將在每次使用特定租戶令牌進行的查詢中強制執行的搜尋參數。
搜尋規則物件
searchRules
必須是一個 JSON 物件。每個鍵必須對應一個或多個索引。
{
"searchRules": {
"*": {},
"INDEX_*": {},
"INDEX_NAME_A": {}
}
}
每個搜尋規則物件可能包含一個 filter
鍵。此 filter
的值必須是一個篩選表達式。
{
"*": {
"filter": "attribute_A = value_X AND attribute_B = value_Y"
}
}
Meilisearch 會將篩選器應用於使用該租戶令牌進行的所有搜尋。令牌只能存取 searchRules
物件中存在的索引。
一個令牌可以包含任意數量的索引規則。特定規則集會優先並覆蓋 *
規則。
危險
由於租戶令牌是在您的應用程式中產生的,Meilisearch 無法檢查搜尋規則篩選器是否有效。無效的搜尋規則會在搜尋時返回錯誤。
請參閱搜尋 API 參考資料,以獲取關於 Meilisearch 篩選語法的更多資訊。
搜尋規則也可以是一個空物件。在這種情況下,租戶令牌將可以存取索引中的所有文件。
{
"INDEX_NAME": {}
}
範例
單一篩選器
在此範例中,使用者只會收到 user_id
等於 1
的 medical_records
文件。
{
"medical_records": {
"filter": "user_id = 1"
}
}
多個篩選器
在此範例中,使用者只會收到 user_id
等於 1
且 published
欄位等於 true
的 medical_records
文件。
{
"medical_records": {
"filter": "user_id = 1 AND published = true"
}
}
允許存取索引中的所有文件
在此範例中,使用者可以存取 medical_records
中的所有文件。
{
"medical_records": {}
}
使用部分萬用字元鎖定多個索引
在此範例中,使用者將收到來自任何以 medical
開頭的索引的文件。這包括諸如 medical_records
和 medical_patents
之類的索引。
{
"medical*": {
"filter": "user_id = 1"
}
}
使用萬用字元鎖定所有索引
在此範例中,使用者將收到來自整個實例中任何索引的文件。
{
"*": {
"filter": "user_id = 1"
}
}
手動鎖定多個索引
在此範例中,使用者可以存取所有索引中 user_id = 1
的文件,除了其中一個。當查詢 medical_records
時,使用者只能存取已發布的文件。
{
"*": {
"filter": "user_id = 1"
},
"medical_records": {
"filter": "user_id = 1 AND published = true",
}
}
API 金鑰 UID
租戶令牌有效負載必須包含 API 金鑰 UID 才能驗證請求。UID 是一個字母數字字串,用於識別 API 金鑰。
{
"apiKeyUid": "at5cd97d-5a4b-4226-a868-2d0eb6d197ab"
}
查詢取得單個 API 金鑰端點以獲取 API 金鑰的 UID。
UID 必須指示一個有權限進行搜尋操作的 API 金鑰。令牌具有與用於產生它的 API 金鑰相同的索引和路由存取權限。
由於主金鑰不是 API 金鑰,您不能使用主金鑰建立租戶令牌。避免暴露 API 金鑰,並始終在您的應用程式後端產生令牌。
租戶令牌和過期的 API 金鑰
如果 API 金鑰過期,使用它建立的任何租戶令牌都將失效。如果由於主金鑰變更而刪除或重新產生 API 金鑰,情況也是如此。
到期日
到期日必須是 UNIX 時間戳記或 null
。
{
"exp": 1646756934
}
令牌的到期日不能超過其父 API 金鑰的到期日。
設定令牌到期日是可選的,但強烈建議。沒有到期日的令牌將無限期保持有效,並且可能存在安全隱患。