2015-11-10 141 views
0

我正在构建一个复杂的网页,它有许多用户/组/权限,用户可以根据ACL(使用Symfony2Symfony2 ACL)查看全部/部分/没有特定类型的对象。 。AngularJs的服务器端渲染模板

我现在正在处理的是,我不想在前端显示每个UI元素,并且如果用户做了他没有权限的操作,就会抛出403错误。用户没有权限看到的隐藏元素对UX来说会更好。

这就好像我为用户显示产品信息页面,如果用户没有权限在此产品或所有产品上执行此操作,我不想显示编辑/删除按钮(类别范围权限)。

随着Twig和服务器端渲染模板就会很容易如添加一堆权限检查的模板

{% if is_granted('EDIT', product) %} 
    <button>Edit product</buttom> 
{% endif %} 

但如何与AngularJs处理这个在客户方?

我想是这样的:

  1. 创建服务嫩枝模板渲染服务器端的AngularJs控制器方法。这需要的id识别物体,这对用户必须按顺序对权限的参数看到编辑/删除在模板呈现按钮(Twigis_granted()处理此服务器侧)

  2. 用户询问以查看特定产品/product/1。路由器templateUrl将为/templates/product/view.html?object_id=1,其中object_id标识对象,在将模板服务器端渲染为授予或拒绝呈现UI元素时应使用该对象。

  3. 产品JSON然后取出并放入模板,它已经被渲染服务器端,并具有一定的角{{ }}等待产品数据被加入到。

是否有任何类似的情况下解决了使用您熟悉的其他服务器端技术,可以作为示例引导我迈向成功之路?

回答

0

在我们的项目客户端Angular代码就足够了。

  • 后端不会发送任何数据给前端用户没有查看/访问权限。 (403)
  • 前端目前登录页面用户与女巫用户可以进行身份​​验证。然后前端将提供的凭证发送到后端,后者负责实际检查。
  • 后端将为前端提供用户角色/访问权限/特权。如果那些更复杂的专用API端点将被提供。 (铁:可以在用户访问这个要:第铁:那要:是的,但不能删除等。),如果对数据的从后端返回有条件地呈现UI部分
  • 前端会使用。

请注意,我使用后端和前端,所描述的技术是框架不可知的,几乎可以与任何工作。

对于Angular,我们创建了CurrentUser服务,该服务有is('role_name'),如果用户已分配角色则返回true,否则返回false。 ng-if或plain旧if(),然后用于有条件地呈现html标记/数据的位置。

+0

我需要检查用户对特定对象的特定操作权限(VIEW/CREATE/EDIT/DELETE)。在每个对象上进行API调用检查都不会有效,我认为。 – nn4n4s

+0

您是否可以扩展API,以便每次前端请求时都将ACL与数据一起发送?然后你需要一些解码该acl数据的服务,但是在UI上它仍然是一个如果每个动作。 –

+0

@ nn4n4s你不应该发送那些loged用户不能'VIEW'的数据如果有一些从它计算出来的聚合值,在后端做。最终用户可以打F12,访问开发工具,并查看**整个**网络流量。所以根本不要发送这样的数据。 –