7

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

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

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

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

4

2 回答 2

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 服务动态传入的数据,只有页面的静态元素。

于 2013-06-15T07:03:57.343 回答
1

我会创建自定义BaseModel/BaseCollection类,修改后的解析逻辑会从数据层中删除不可访问的属性。稍后您将能够将此数据隐藏逻辑透明地传输到服务器端并获得生产价值的安全性。

至于权限数据,_securityModel/Collection 类的属性是声明它的好地方。

在视图中,使用 akoskm 建议的条件逻辑

于 2013-06-15T08:56:29.663 回答