我正在创建一个Angular 1 SPA。某些控件仅对具有特定权限的用户可见。这基于服务器api调用设置的范围变量。
我想到如果我可以通过浏览器开发控制台访问这些变量,我可以更改它们的值。
我试过这个例子:
angular.element($0).scope().$parent.myUserInfo.accessType = "admin"
angular.element($0).scope().$apply()
果然,即使我没有以管理员身份登录,也会在页面上弹出管理控件。是否有最好的做法可以阻止这种情况,还是我完全错了?
答案 0 :(得分:2)
验证始终必须在服务器端进行。
我不知道您要做什么,但如果用户与某些webService / Rest API等进行交互......服务器应该禁止此类交互。
如果范围的accessType
属性只是一种让您知道应该向用户显示哪个UI,并且服务器正确处理了身份验证/会话机制的方法,那应该不是问题
但是,您不能禁止用户使用开发控制台,因此您可以更好地正确处理身份验证。
答案 1 :(得分:1)
我不确定是否有办法保护$ scope中的值。
但是由于JavaScript是在客户端执行的,因此用户可以修改所述代码,我总是会在服务器端验证权限。然后,如果用户启用管理员控制客户端,因为他们无权使用api调用,这无关紧要。