【问题标题】:Flutter Firestore Role Based Security RulesFlutter Firestore 基于角色的安全规则
【发布时间】:2020-05-23 01:54:33
【问题描述】:

我正在尝试确定我的用户集合中的指定字段 role 是否是应用程序中使用的字段。我在规则部分模拟了这个规则,如下图所示:

我正在尝试访问此图像中用户集合的Admin 字段并检查规则以允许在用户是管理员或超级用户时创建新产品(可以创建管理员用户)。下图:

规则模拟似乎失败了,是否有适当的方法来访问安全规则中的该字段(参见两个图像)或正确设置数据库?这些字段是使用单选按钮设置在表单中的吗?

总体期望的任务是只允许我的用户以及应用程序本身访问和/或操作应用程序数据库的某些部分,有没有办法查询这些字段并有条件地呈现 UI 和交互,以避免整个安全规则的事情?

超级用户在所有者的集合中,为简洁起见省略,其中只有一个文档。

谢谢。

【问题讨论】:

    标签: flutter google-cloud-firestore firebase-security


    【解决方案1】:

    您的规则是检查“项目”集合中的文档,但您的屏幕截图显示“用户”集合中的文档内容。所以,这里显然是不匹配的。

    如果您想允许使用另一个文档的内容访问一个文档,您需要get() 另一个文档,然后检查它是否有您要查找的数据。 documentation 中提供了一个示例。您需要做的是get() 当前经过身份验证的用户的用户文档,然后检查该文档的角色字段。它看起来更像这样:

    get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role
    

    【讨论】:

    • 哇,那里的指针很清晰,但是我如何访问“get”的 RHS 以了解它是否是管理员、销售等?不需要等号,或者您可以为我编辑规则,谢谢
    • 对不起,我不明白这个问题。我展示的表达式可以像您现在所做的那样与字符串进行比较,如文档中所示。
    • 错误运行模拟 - 错误:simulator.rules 行 [24],列 [23]。类型错误。收到:[string] 预期:[bool]。它显示此错误,当我将其放入函数时,该函数是否可以返回布尔值,因为用户可以是销售、帐户、管理员或超级用户?
    • 是否有可行的解决方案使用自定义声明创建用户?
    • 只有在我将 RHS 均衡为像 == '' 这样的字符串角色后,模拟才有效。感谢您的回答,应该早点发布。
    猜你喜欢
    • 2019-06-15
    • 2020-11-28
    • 1970-01-01
    • 2018-03-22
    • 2018-11-27
    • 2019-07-23
    • 1970-01-01
    • 2018-08-04
    • 2019-05-28
    相关资源
    最近更新 更多