JavaScript客户端应用程序中的权限/ ACL

时间:2013-06-15 03:14:38

标签: javascript backbone.js permissions acl marionette

如果我有一个JavaScript前端应用程序,处理权限/ ACL的最佳/常用做法是什么。例如,我想显示/隐藏一些元素等。当然,它不安全,但仍然在视图层,我该如何控制它。

我使用BackboneJS(和Marionette一起)作为客户端框架,所以使用jQuery,Underscore等。

我在高层思考,我可以试着以某种方式禁用一些路线。需要一些研究,但我可以做Router.on("route", checkPermissions)

然后在视图层上,隐藏/显示元素,...仍然不确定如何最好地处理这个。我需要将一些权限对象传递给模型...

2 个答案:

答案 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建议