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