2012-09-08 159 views
3

我有一个JavaScript Web应用程序几乎完全呈现客户端。 通过REST接口使用模型在客户端和服务器之间交换数据,然后使用客户端模板呈现数据。如何将权限/授权数据传递给客户端Javascript?

我现在需要根据用户角色/权限(授权是基于服务器端模型的ACL)有条件地呈现UI的某些部分(或执行某些操作)。

什么是最好的方式从服务器通信的许可数据到客户,考虑到:

  1. 的模型交换可能有其他的嵌入式型号,其 特定权限
  2. 我需要还知道对不同型号的READ和CREATE权限(因此模型对象尚不可用客户端)
  3. 应尽量减少REST调用和DB调用

回答

3

您的客户应根据服务器基于每个请求返回的信息向用户展示控件。如果来自服务器的响应包含一些旨在用于执行操作的信息,则客户端应该采取该提示并启用按钮或使其可见或其他。

使用这种方法,您可以根据资源/权限 - 此模型+ HTTP方法来定义您的ACL。当服务器即将返回资源表示形式时,它可以包含用户应该通过轮询ACL获取用户拥有的所有资源(或其他资源,如儿童/后代资源)的资源的任何选项。

+0

是的,我认为这是我唯一可行的选择。它突出了主要概念......做得稍微复杂一些。我将通过我的完整解决方案来更新这篇文章。 – Mario

0

这我不知道你的应用需求是什么,或者如果你正在使用的任何JavaScript框架。我会看here。 Addy Osmani在javascript社区非常大,并且帮助创建了这个javascript框架。它看起来像它有能力处理你的问题。下面是从主自述

沙盒包括权限层,让您的小部件配置权限,如特定部件是否有渲染页面等

权报价还有一些其他的javascript框架,你可以看看,这将使页面级的安全性变得更加清晰,并且意味着你不必重写很多代码。另一个例子是Backbone Marionette它具有复合视图的概念,可以使它直接实现页面级安全性。

最后,另一种选择是根本不转移您的安全信息。您的REST API只能提供他们可以访问的模型信息。您需要以适当处理“缺失”数据的方式编写客户端模板。