- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Flutter 和 Firebase 编写一个应用程序(目前使用 Firestore、Storage 和 Authentication)。
目前应用程序显示来自 Firebase 的内容,但现在我正试图弄清楚如何在 Firebase 中实现编写/编辑/删除内容的最佳方法。
目标是让用户拥有管理员权限。
我的问题是我是否可以在客户端应用程序中构建一个管理面板(这将是理想的),或者如果这被认为是不好的做法,我应该在另一个应用程序中构建一个管理面板并使用云函数。
例如,目前我在 Flutter/Dart 代码中执行身份验证(注册/注册),注册时会在 Firestore isAdmin = false
中创建一个字段,然后我可以手动将其设置为 true (如果我愿意的话)在 Firestore 控制台中。这会不会是一种“不安全”的执行方式?
最佳答案
The goal is to have users with admin privileges
由于您正在使用身份验证服务,您已经完成了一半的解决方案:通过身份验证,您可以识别正在使用您的应用程序的每个用户。
另一部分是授权:这通常是通过 Firebase 中的安全规则完成的,包括 Firestore 和 Cloud Storage。
为了能够授权某些用户(通过身份验证识别)具有管理员权限,您需要知道哪些用户以您授权他们的方式具有管理员角色执行管理功能。
识别管理员用户的一种可能方法是在 Firestore 的某些用户文档中使用 isAdmin
标志,正如您在问题中提到的那样。 documentation 中有一个使用此方法的 Firestore 安全规则示例。 .
但是,如果您想将此标志(存储在 Firestore 中)与云存储的安全规则一起使用,您会遇到一些问题。在撰写本文时,无法读取云存储安全规则中 Firestore 文档的值。
解决方案是使用Custom Claims .您将在文档中找到有关如何以满足您需求的方式实现它的所有详细信息。
Can I build an Admin Panel inside the client app?
是的,你可以很好地做到这一点。一旦您的安全措施得到正确实现(通过身份验证和安全规则,如上所述),就没有什么可以阻止您开发管理面板。如果非管理员用户可以访问管理面板,他/她将无法执行管理操作(即写入/编辑/删除 Firestore 或云存储数据)。
此外,使用自定义声明,您可以在前端访问它们,以根据用户的角色或访问级别修改客户端 UI(即仅向管理员用户显示管理模块的页面、按钮和菜单项 -但是请注意,这不会阻止某人对您的应用程序进行逆向工程并执行专用于管理员用户的查询:这就是正确实现身份验证和安全规则部分的关键所在-)。看这个section在海关 claim 文件中。
Should I build an Admin Panel in another app and using Cloud Functions?
如果您不想使用某些逻辑来隐藏/显示管理面板元素(基于自定义声明,见上文)使您的应用过于复杂,您可以很好地在另一个应用中构建管理面板。
如果您有无法通过标准安全规则实现的特定需求/访问限制,您可以很好地使用一些云功能来检查用户是否是管理员并执行写入/编辑/删除管理员操作(但请注意,虽然从 Cloud Functions 与 Firestore 交互非常容易,与 Storage 交互可能有点棘手:使用 Cloud Storage 客户端 SDK 比通过 Cloud Functions 与 Cloud Storage 交互要容易得多)。
您最好使用 Callable Cloud Functions,因为“使用可调用函数、Firebase 身份验证和 FCM token (如果可用)会自动包含在请求中”。 (参见 https://firebase.google.com/docs/functions/callable)。
旁注:您可能对此感兴趣 article ,其中详细介绍了如何创建用于管理用户访问和角色的管理模块。 (免责声明:我是作者)。
关于firebase - flutter/火力基地 : Admin features in-app or cloud functions?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59740699/
我正在使用 Firebase 在我的应用程序中添加登录/注册。它运行良好,但现在我想检查用户在打开应用程序时是否已经注册并登录,如果是这样,则向他显示主页,否则向他显示登录页面。所以我做了一些搜索,主
我使用 flutter 。我想仅在 2020 年 4 月 26 日这一周将 Firebase 中的 CH 值更新为 false。什么时候有办法? 失败的 Ex.cord: _firestore.col
我来寻求您对我的申请中遇到的问题的帮助。 问题是这样的:新闻源上的帖子位于此捕获中的此帖子 -> [postid] 位置下的数据库中 ,当用户保存帖子时,它在数据库中的存储方式如下:用户 -> [us
我是一名优秀的程序员,十分优秀!