我正在构建一个复杂的网页,它有许多用户/组/权限,用户可以根据ACL查看特定类型的所有/部分/无对象(使用Symfony2和{{3} })。
我现在要处理的是,我不想在前端显示每个UI元素,如果用户做了他未经许可的事情,就会抛出403错误。用户无权查看的隐藏元素对于UX来说会更好。
如果我为用户显示产品信息页面,我不想显示EDIT / DELETE按钮,如果用户没有权限对此产品或所有产品执行此操作(类范围权限)
使用Symfony2 ACL和服务器端呈现的模板,在模板中添加一堆权限检查会很容易
{% if is_granted('EDIT', product) %}
<button>Edit product</buttom>
{% endif %}
但如何使用Twig在客户端处理此问题?
我在想的是:
创建一个控制器方法,为AngularJs提供服务器端的Twig模板。这需要id
参数标识对象,用户必须具有该权限才能看到模板中呈现的EDIT / DELETE按钮(AngularJs和is_granted()
处理此服务器端)
用户要求查看特定产品/product/1
。路由器templateUrl
将为/templates/product/view.html?object_id=1
,其中object_id
标识对象,在呈现模板服务器时应使用该对象以授予或拒绝呈现ui元素。
{{ }}
等待放置产品数据。是否有任何类似的案例使用您熟悉的其他服务器端技术解决,可以作为一个例子来引导我走向成功?
答案 0 :(得分:0)
在我们的项目客户端,Angular代码就足够了。
请注意我使用后端和前端,因为所描述的技术是框架无关的,并且几乎可以使用。
对于Angular,我们创建了CurrentUser
服务is('role_name')
,如果用户已分配角色,则返回true,否则返回false。 ng-if或plain old if(),然后用于有条件地呈现html标签/数据。