Reactjs 处理用户角色
我用Firebase创建了一个无服务器的React应用程序,用于托管、数据库和用户身份验证 现在让我们假设我有三个角色:学生、老师和(你猜到了)管理员 我目前这样做是为了显示特定于角色的组件:Reactjs 处理用户角色,reactjs,firebase,user-roles,Reactjs,Firebase,User Roles,我用Firebase创建了一个无服务器的React应用程序,用于托管、数据库和用户身份验证 现在让我们假设我有三个角色:学生、老师和(你猜到了)管理员 我目前这样做是为了显示特定于角色的组件: /* Get user data from the database which has a 'type' field with one of the above values, then in a child render function : */ {this.props.userData.typ
/*
Get user data from the database which has a 'type' field with one of the above values,
then in a child render function :
*/
{this.props.userData.type === 'student' &&
//Show components for students
}
{this.props.userData.type === 'teacher' &&
//Show components for teacher
}
现在,在我看来,用户可以打开Chrome开发工具并使用React开发工具将prop值更改为其他值之一
我遇到过通过定义角色和权限来使用“Can”组件的情况,但这基本上做了相同的事情,用户可以更改传递给“Can”组件的道具以访问另一个角色的内容
我考虑过的解决方案:
- 对“类型”字段使用模糊值,如随机数或单词,而不是明显的教师/学生
- 在数据库中的每个角色下存储uid列表,并检查列表下是否存在当前uid,并传递隐藏在某个不知情对象或随机名称下的某些道具,诸如此类
- 创建完全不同的路由并设置重定向,这样用户就没有足够的时间更改道具或状态,因为重定向的组件已不再安装李>
- 有没有更好的方法来构造我的应用程序,这样我就不必使用状态或道具来识别用户类型李>
- 我走的是正确的道路,还是有什么明显的东西让我错过了
我知道我无法阻止用户编辑组件的状态或道具。答案建议我在服务器上验证用户类型,以检查用户是否可以执行操作。在我当前的设置中,有什么方法可以实现这一点(见第一行)?或者是否有必要拥有一个
server.js
?访问者将始终能够以某种方式“黑客”您的前端应用程序(例如,通过更改React-Dev工具中的道具或任何其他方式)
web完全可以这样工作,因为您的所有主要逻辑都应该位于后端,在那里您可以实际防止某些操作发生
这里提出了一个非常类似的问题访问者将始终能够以某种方式“黑客”您的前端应用程序(例如,通过更改React Dev Tools中的道具或以任何其他方式) web完全可以这样工作,因为您的所有主要逻辑都应该位于后端,在那里您可以实际防止某些操作发生
这里提出了一个非常类似的问题除了美观原因(显示/隐藏按钮等),浏览器中的角色不应该重要。您的访问控制应该在有函数和规则支持的环境中完成
任何恶意用户都可以编辑HTML,或发送HTTP请求以假装他们有角色。但是,在后端,您应该检查
用户id
是否实际具有该角色,并拒绝运行您不应该运行的代码。角色在浏览器中的重要性不应超出美观原因(显示/隐藏按钮等)。您的访问控制应该在有函数和规则支持的环境中完成
任何恶意用户都可以编辑HTML,或发送HTTP请求以假装他们有角色。但是,在后端,您应该检查
用户id
是否实际具有该角色,并拒绝运行您不应该运行的代码。这是否回答了您的问题?这回答了你的问题吗?如果我在对数据库进行更改之前检索“type”字段并检查它(如handleSubmit()
函数中),它会工作吗?我没有服务器代码,我想它不可能是气密的,但如果用户试图破坏应用程序,我只是不想让它变得那么容易。如果您使用firestore托管数据,您可以制定安全规则:如果我检索“类型”字段并在更改数据库(如handleSubmit()
函数)之前检查它是否有效?我没有服务器代码,我想它不可能是气密的,但我只是不想让用户在尝试破坏应用程序时变得那么容易。如果你使用firestore托管数据,你可以有安全规则:我之前在搜索解决方案,遇到了链接问题。我知道我无法阻止用户编辑状态/道具。但鉴于我本身没有后端,我想知道我是否可以对我当前的应用程序做些什么,以使用户难以(如果不是不可能的话)执行未经授权的操作。我之前在搜索解决方案时遇到了相关问题。我知道我无法阻止用户编辑状态/道具。但鉴于我本身没有后端,我想知道我是否可以对我当前的应用程序做些什么,让用户难以(如果不是不可能的话)执行未经授权的操作。