【问题标题】:how to best secure controllers actions and display different content symfony2如何最好地保护控制器操作并显示不同的内容 symfony2
【发布时间】:2015-07-31 12:36:33
【问题描述】:

我正在使用 symfony2 构建一个 Web 应用程序。我有不同类型的不同角色的用户; ROLE_STUDENT 和 ROLE_TEACHER,这两个用户可以访问课程的详细信息;如果用户是老师,则会显示按钮编辑,如果是学生,则会显示按钮订阅,实际上这并不安全,因为如果学生在地址栏中键入,它只是隐藏了控制器操作的路径/course/2/edit 将执行编辑操作,因此我必须使用 @security 注释来保护操作:

这是我到目前为止所做的:

/**
 * @Security("has_role('ROLE_TEACHER')")
 */    public function editAction()
      {}

在树枝上:

{% if is_granted('ROLE_TEACHER') %} 
   <a href="{{path('edit', {'id': course.id})}}">edit</a>
{% elseif is_granted('ROLE_STUDENT')%}
   <a href="{{path('subscribe', {'id': course.id})}}">subscribe</a> 

.

问题是我有很多可供两个用户访问的内容,我认为有一个更好的解决方案,而不是复制/粘贴相同的代码。我是 Symfony 2 的新手,请多多包涵。

【问题讨论】:

    标签: symfony


    【解决方案1】:

    有多种方法可以实现这一点,但您所做的并没有错。

    实现此目的的一种方法是为ROUTES 设置ROLE,这样ROLE_STUDENT 角色只能访问类似于website.com/students 的URL,而ROLE_TEACHER 只能访问website.com/teachers

    access_control:
        - { path: ^/student/, roles: ROLE_STUDENT }
        - { path: ^/teamleader/, roles: ROLE_TEACHER }
    

    然后,您可以仅为 website.com/teachers/course/2/edit 这样的教师设置编辑路线,这样ROLE_STUDENT 将没有可用的编辑路线,如果他们尝试访问教师路线,他们将收到 404 错误或访问被拒绝错误。您可以对订阅功能执行相同操作。

    就像我说的,还有更多方法可以实现这一点,这就是其中之一。

    【讨论】:

      猜你喜欢
      • 2016-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-13
      • 1970-01-01
      • 1970-01-01
      • 2010-11-07
      相关资源
      最近更新 更多