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



如果我有一个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建议的条件逻辑

最新更新