服务器端为AngularJs呈现模板

时间:2015-11-10 07:14:55

标签: angularjs symfony twig

我正在构建一个复杂的网页,它有许多用户/组/权限,用户可以根据ACL查看特定类型的所有/部分/无对象(使用Symfony2和{{3} })。

我现在要处理的是,我不想在前端显示每个UI元素,如果用户做了他未经许可的事情,就会抛出403错误。用户无权查看的隐藏元素对于UX来说会更好。

如果我为用户显示产品信息页面,我不想显示EDIT / DELETE按钮,如果用户没有权限对此产品或所有产品执行此操作(类范围权限)

使用Symfony2 ACL和服务器端呈现的模板,在模板中添加一堆权限检查会很容易

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

但如何使用Twig在客户端处理此问题?

我在想的是:

  1. 创建一个控制器方法,为AngularJs提供服务器端的Twig模板。这需要id参数标识对象,用户必须具有该权限才能看到模板中呈现的EDIT / DELETE按钮(AngularJsis_granted()处理此服务器端)

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

  3. 然后获取产品JSON并将其放入模板中,该模板已经在服务器端呈现,并且有一些Angular {{ }}等待放置产品数据。
  4. 是否有任何类似的案例使用您熟悉的其他服务器端技术解决,可以作为一个例子来引导我走向成功?

1 个答案:

答案 0 :(得分:0)

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

  • 后端不会向前端用户发送任何数据,无权查看/访问。 (403)
  • 前端向用户提供登录页面,巫婆用户可以进行身份​​验证。然后,前端将提供的凭证发送给后端,后端负责实际检查。
  • 后端将为前端提供用户角色/访问权限/权限。如果那些更复杂的专用API端点将被提供。 (Fe:用户可以访问吗?Be:不。Fe:那个?是:是的,但不能删除等。)
  • 前端将使用从后端返回的数据来有条件地呈现UI部件。

请注意我使用后端和前端,因为所描述的技术是框架无关的,并且几乎可以使用。

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