如何处理 Firebase 后端 Flutter 中的用户角色?客户端和管理应用程序还是两者在一个应用程序中?



我正在做一个有2个用户角色的项目,分别是客户和卖家。

目前,我使用相同的应用程序为两个用户角色。让我快速解释一下:两个用户都有一个LoginScreen,如果他们用他们的电子邮件和密码(我也使用Firebase)登录Firebase's signInWithEmailAndPassword方法,有一个检测用户角色的功能。

我的目标

卖方将有一些不同的功能和属性(添加,更新,删除某些产品)。我不知道把它们分开放在两个应用中好还是都放在一个应用中好?

下面是该函数的部分代码:

if (user != null) {
if (isSeller != false) {
return const SellerHome();
} else {
return const CustomerHome();
}
} else {
return const LoginView();
}

可以看到,如果用户在Firebase CloudStorage中有isSeller = true字段,它返回SellerHome。但是如果没有,返回CustomerHome。

但是这是一个安全的或好的方式来处理User Role Based Auth或不?我应该使用云功能吗?

我应该把CustomerHome和SellerHome分开吗?

我稍微看了一下Firebase Custom Claims,实际上我没有弄清楚。显然,我可以说我不是专业的Firebase和Flutter。

您是在单独的应用程序中实现最终用户和应用程序管理功能还是在单个应用程序中实现,这完全是个人的选择。但无论哪种方式都不应该有安全风险。

对于您共享的代码,恶意的非管理员用户所能做的最坏的事情就是显示SellerHome小部件。这本身通常不是一个安全问题,因为小部件是无害的,除非它也允许用户执行卖方功能。因为这个功能需要调用一些后端功能,所以是您希望确保用户被授权执行他们正在尝试执行的操作的地方。

例如,如果你使用Firebase的一个数据库(Firestore或Realtime Database)作为你的应用程序的后端,你可以使用它的服务器端安全规则来确保所有的数据访问都是授权的。这里常见的使用模式是所谓的仅内容所有者访问,这在这些规则中很容易实现。在这些规则中有更多的方法来保护数据访问,它们可以(有时)和前端代码一样复杂。

如果您不使用Firebase数据库作为后端,您通常希望将ID令牌从前端代码传递到后端,在那里验证ID令牌,然后确定(使用您自己的逻辑)未标识的用户是否被授权执行他们请求的操作。

相关内容

最新更新