我想知道对于具有不同角色权限的应用程序,什么是正确的方法。我认为在登录后,服务器会发送一些预定义的角色,并根据该角色限制或显示各个面板。因此,我将该值存储在主视图的viewModel中,如
Ext.define('MyApp.view.main.MainModel', {
extend: 'Ext.app.ViewModel',
alias: 'viewmodel.main',
data: {
user_id : null,
user_name : '',
role : '',
},
});
稍后在应用程序中,我检查role的存储值,并基于此限制一些操作。但是,我意识到这是荒谬的,因为可以通过控制台轻松访问viewModel,并且可以更改'role'的值。例如:Ext.getCmp('main').getViewModel().data.role = 'Admin'
但是存储这些信息的正确方法是什么呢?这不仅对于基于权限角色的应用程序非常重要,对于存储其他数据也非常重要。所以,我想这是一个小问题,但我真的不明白。
1条答案
按热度按时间6yt4nkrj1#
实际上这不是一个小问题。我不认为有任何适当的方法来实现你想做的事情。不管你使用的框架是什么,它都是客户端js代码,可以从控制台修改/黑客攻击。您可以尝试通过混淆代码或其他一些聪明的方法来隐藏安全逻辑,但这只是错误的安全意识,您无法阻止有经验的js开发人员工作。它周围。
如果安全性在你的应用程序中真的很重要,那么不要在UI上隐藏组件,而是尝试限制数据/API访问,因为你可以在后端更安全地控制访问。也就是说,不要花太多时间来使你的客户端比使用ViewModel方法更安全。但要确保即使是客户端安全被破坏,有人可以授予管理员的权利,那么这个用户将看到您的隐藏面板,但不会从您的API获得数据。
也就是说,您的API不应该将所有数据发送到客户端,也不应该由客户端负责控制数据访问。您的API只应该将经过身份验证的用户角色允许的数据发送到客户端。
根据作者的评论进行编辑以消除误解。
当你的客户端对用户进行身份验证时,它会发送回角色。但是这个角色应该只用于控制UI(显示/隐藏面板和其他控件)。
当您的客户端从服务器请求数据时,它不应该只向请求中的角色发送身份验证数据(即用户凭据)。然后,您的服务器应该根据接收到的凭据查找正确的角色,并只在响应中发送给定角色允许的数据。
这样,即使您的viewModel被黑客攻击,用户也可以看到该角色允许的控件,但不会看到数据,因为您不会填充该数据,因为服务器响应不包含该数据。