Firebase存储中的动态组安全

Firebase存储中的动态组安全,firebase,firebase-authentication,firebase-security,firebase-storage,Firebase,Firebase Authentication,Firebase Security,Firebase Storage,我已经阅读了Firebase Storage的组安全文档,其中建议使用自定义令牌或在文件元数据中包含组信息,但是,当用户离开组时,我并不希望在理想情况下更新每个文件中的元数据,或者必须创建新文件夹并更新组令牌信息 如果这是实时数据库,我会检查用户是否仍然是组成员。有没有一个更优雅的解决方案可以让我去探索 非常感谢是的,通过自定义令牌,您可以将其他属性与用户关联。诀窍在于,当您为给定的用户id创建自定义令牌时,您可以添加其他声明并使用它们来评估访问规则。在您的情况下,在您的服务器上创建令牌时,您可

我已经阅读了Firebase Storage的组安全文档,其中建议使用自定义令牌或在文件元数据中包含组信息,但是,当用户离开组时,我并不希望在理想情况下更新每个文件中的元数据,或者必须创建新文件夹并更新组令牌信息

如果这是实时数据库,我会检查用户是否仍然是组成员。有没有一个更优雅的解决方案可以让我去探索


非常感谢

是的,通过自定义令牌,您可以将其他属性与用户关联。诀窍在于,当您为给定的用户id创建自定义令牌时,您可以添加其他声明并使用它们来评估访问规则。在您的情况下,在您的服务器上创建令牌时,您可以将用户所属的组id添加为附加声明,用户使用该令牌从客户端应用程序登录。因此,每当用户离开您的组时,他的组id关联将被删除,因此当您为该用户重新创建令牌时,您将不再在其他声明中关联组id。 示例

public static String createCustomToken(String userId, Map<String, Object> additionalClaims) {
FirebaseOptions options = new FirebaseOptions.Builder()
.setServiceAccount(new FileInputStream(FIREBASE_ACCESS_FILE)).build();
FirebaseApp.initializeApp(options);
Task<String> customToken = FirebaseAuth.getInstance().createCustomToken(userId, additionalClaims);
return customToken.getResult().toString();
}
public静态字符串createCustomToken(字符串userId,映射附加声明){
FirebaseOptions=newfirebaseOptions.Builder()
.setServiceAccount(新文件InputStream(FIREBASE_ACCESS_文件)).build();
FirebaseApp.initializeApp(选项);
Task customToken=FirebaseAuth.getInstance().createCustomToken(用户ID,附加声明);
返回customToken.getResult().toString();
}