此问题在此处已有答案:
Can I send value with request to Firestore rules(2个答案)
Firestore Security Rules: Passing a request parameter in a get() call?(1个答案)
5个月前关闭。
我想让未经身份验证的用户使用secureKey从firebase获取文档。我想实现的是向请求添加额外的变量,并在规则中检查它是否是有效的请求。例如:
const q = query(doc(db, "questions/question_uid"));
const questionDoc = await getDoc(q, {secureKey: "123456"});
在规则侧:
match /questions/{uid} {
allow get: if request.secureKey === "123456";
}
我假设用户没有经过身份验证,但是拥有有效的secureKey。(上面的代码不是有效的代码,我写它只是为了解释。)是否可以向请求添加自定义参数并在规则端接收它们?
向getDoc添加参数是无效的,如下所示:
const questionDoc = await getDoc(q, {secureKey: "123456"});
1条答案
按热度按时间nbysray51#
是否可以向请求添加自定义参数并在规则端接收它们?
向请求添加额外的变量并在安全规则中检查它是不可能的,但是您可以使用Custom Claims实现类似的操作。但是,要使其工作,您需要为每个用户都有一个帐户。
(You可以)定义用户帐户的自定义属性。这提供了在Firebase应用程序中实现各种访问控制策略(包括基于角色的访问控制)的能力。这些自定义属性可以为用户提供不同级别的访问(角色),这些访问在应用程序的安全规则中强制执行。
在安全性规则中,您可以检查用户是否拥有声明,如下例所示: