谷歌致力於推進種族平等的黑人社區。 怎麼看。
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

安全用戶數據

火力地堡安全規則的雲存儲集成了火力驗證提供了強大的基於用戶的認證,以雲存儲。這允許根據火力地堡認證令牌的索賠細粒度的訪問控制。

用戶認證

當已驗證的用戶執行對雲存儲的請求,則request.auth可變填充與用戶的uidrequest.auth.uid )以及火力地堡認證JWT(的權利要求request.auth.token )。

此外,使用自定義身份驗證時,附加的權利要求中浮現在request.auth.token字段。

當未認證的用戶執行的請求,所述request.auth變量是null

利用這些數據,有兩種使用驗證來保護文件的幾種常見方式:

  • 市民:忽略request.auth
  • 經過身份驗證的私人:檢查request.authnull
  • 用戶私人:檢查request.auth.uid等於路徑uid
  • 一批民營:檢查自定義標記的索賠,以匹配選定的要求,或者讀取文件的元數據,看是否有元數據字段存在

上市

不考慮任何規則request.auth上下文可以被認為是一個public的規則,因為它沒有考慮到用戶的認證範圍內。這些規則可以用於堆焊公開數據,如遊戲資產,聲音文件,或其它靜態內容有用。

// Anyone to read a public image if the file is less than 100kB
// Anyone can upload a public file ending in '.txt'
match /public/{imageId} {
  allow read: if resource.size < 100 * 1024;
  allow write: if imageId.matches(".*\\.txt");
}

經過身份驗證的私人

在某些情況下,你可能希望數據能夠通過應用程序的所有身份驗證的用戶可見的,而不是由未經授權的用戶。由於request.auth變量是null的所有未經驗證的用戶,所有你需要做的就是檢查request.auth為了需要認證的變量存在:

// Require authentication on all internal image reads
match /internal/{imageId} {
  allow read: if request.auth != null;
}

用戶私人

到目前為止,最常見的用例request.auth將是為用戶提供細化的權限個別用戶在他們的文件:閱讀私人文件上傳,從個人資料圖片。

由於雲存儲的文件有一個完整的文件路徑,所有的需要,使用戶控制的文件中的文件路徑的一塊獨特的,用戶識別信息(如用戶的uid ),可以進行檢查時,規則進行評估:

// Only a user can upload their profile picture, but anyone can view it
match /users/{userId}/profilePicture.png {
  allow read;
  allow write: if request.auth != null && request.auth.uid == userId;
}

一批民營

另一個同樣常見的情況是允許的對象上組權限,如允許幾個團隊成員協作上的共享文件。有幾種方法可以這樣做:

  • 薄荷一個火力地堡驗證自定義的令牌包含關於群組成員的其他信息(例如,組ID)
  • 包括組信息(例如,組ID或授權的列表uid或多個)在文件的元數據

一旦該數據被存儲在令牌或文件元數據,它可以從一個規則中引用:

// Allow reads if the group ID in your token matches the file metadata's `owner` property
// Allow writes if the group ID is in the user's custom token
match /files/{groupId}/{fileName} {
  allow read: if resource.metadata.owner == request.auth.token.groupId;
  allow write: if request.auth.token.groupId == groupId;
}

完整的示例

四種常見類型的認證限制的簡單的情況下被示出在下面的例子:

service firebase.storage {
  match /b/{bucket}/o {
    match /images {
      // Anyone can view any image (no auth, publicly readable)
      match /{allImages=**} {
        allow read;
      }

      // Only authenticated users can write to "public" images
      match /public/{imageId} {
        allow write: if request.auth != null;
      }

      // Only an individual user can write to "their" images
      match /{userId}/{imageId} {
        allow write: if request.auth.uid == userId;
      }

      // Allow a "group" of users to read/write to shared images
      // An owner metadata property on the object contains the groupId for reads
      // A custom token has been minted with a groupId property for writes
      match /{groupId}/{imageId} {
        allow read: if resource.metadata.owner == request.auth.token.groupId;
        allow write: if request.auth.token.groupId == groupId;
      }
    }
  }
}