如果我有一个JavaScript前端应用程序,处理权限/ ACL的最佳/常用做法是什么。例如,我想显示/隐藏一些元素等。当然,它不安全,但仍然在视图层,我该如何控制它。
我使用BackboneJS(和Marionette一起)作为客户端框架,所以使用jQuery,Underscore等。
我在高层思考,我可以试着以某种方式禁用一些路线。需要一些研究,但我可以做Router.on("route", checkPermissions)
。
然后在视图层上,隐藏/显示元素,...仍然不确定如何最好地处理这个。我需要将一些权限对象传递给模型...
答案 0 :(得分:6)
要在屏幕上隐藏/显示元素,我会在模板中进行内联检查,例如:
<% if (user.isInRole('ADMIN', 'MNGR')) { %>
<li <% page == "store" ? print('class="active"') :'' %>>
</li>
<% } %>
并在我的用户模型中添加了以下帮助函数以检查权限:
isInRole: function (rr) {
var self = this;
$.each(rr, function(i) {
if (rr[i] === self.currentRole) {
alert('pass');
}
});
}
我认为这是足够安全的,因为在服务器端再次发生了对所需权限的实际检查。通过隐藏一些控件,我只是引导用户完成应用程序,而不是让他与他/她没有所需权限的操作混淆。
通过这种方法,我永远不会隐藏通过REST服务动态传递的数据,而只隐藏页面的静态元素。
答案 1 :(得分:1)
我使用修改后的解析逻辑创建自定义BaseModel
/ BaseCollection
类,这些逻辑将从数据层中删除不可访问的属性。稍后,您将能够透明地将此数据隐藏逻辑传输到服务器端,并获得具有生产价值的安全性。
对于权限数据,Model / Collection类的_security
属性是声明它的好地方。
在视图中,使用条件逻辑作为akoskm建议