如果我有一个JavaScript前端应用程序,处理权限/ACL的最佳/常见做法是什么?例如,我想要显示/隐藏一些元素等。当然,它不安全,但仍然在视图层,我怎么能控制这个。
我使用BackboneJS(与木偶)作为客户端框架,所以使用jQuery,下划线等
我在高层考虑,我可以尝试以某种方式禁用一些路由。需要一些研究,但我可以做Router.on("route", checkPermissions)
。
然后在视图层,隐藏/显示元素,…我还是不知道该怎么处理。我需要在模型中传入一些权限对象…
为了使元素在屏幕上隐藏/可见,我在模板中执行内联检查,如下所示:
<% 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');
}
});
}
我认为这是足够安全的,因为对所需权限的实际检查再次在服务器端进行。通过隐藏一些控件,我只是在引导用户通过应用程序,而不是让他混淆他的行动,因为他/她没有所需的特权。
使用这种方法,I'm 从不隐藏通过REST服务动态传入的数据,只隐藏页面的静态元素。
我将创建自定义BaseModel
/BaseCollection
类,修改解析逻辑,从数据层删除不可访问的属性。稍后,您将能够透明地将此数据隐藏逻辑传输到服务器端,并获得具有生产价值的安全性。
对于权限数据,模型/集合类上的_security
属性将是声明它的好地方。
在视图中,使用akoskm建议的条件逻辑