【问题标题】:what symfony2 access_control really does?symfony2 access_control 的真正作用是什么?
【发布时间】:2013-11-09 12:26:53
【问题描述】:

假设我有三个角色:

1) ADMIN_ROLE
2) USER_ROLE
3) COMPANY_ROLE 

现在我为每个角色都有捆绑包。

1) AdminBundle
2) UserBundle
3) CompanyBundle

我有三个路线

1) /admin
2) /user
3) /company

我不想检查每个捆绑包中每个控制器中的用户是(他的角色是什么)。 symfony 安全的这一部分会为我做这些吗:

-{ path: ^/admin, roles: ROLE_ADMIN } #only ROLE_ADMIN will be able to see this
-{ path: ^/user, roles: ROLE_USER } #only ROLE_USER will be able to see this
-{ path: ^/company, roles: ROLE_COMPANY } #only ROLE_COMPANY will be able to see this

我的问题是:

1) 是否可以拥有 ROLE_COMPANY(或该仪表的任何其他自定义角色)?

2) access_control 会检查登录用户的角色,如果我是 ROLE_ADMIN 并试图访问一些为 ROLE_USER 提供的页面,symfony 会处理它并说“这不是给管理员的,这是给用户的” ?

3) 如果 symfony 不能为我处理这个问题,是否可以在每个打开/刷新页面上设置一些事件监听器来帮我检查这个?

我不想检查登录用户的每个控制器。这有点愚蠢。

【问题讨论】:

    标签: php symfony


    【解决方案1】:
    1. 是的
    2. 是的(您也可以定义层次结构,因此您可以使 ROLE_ADMIN 能够访问它的所有子角色)。例如,您可以让 ROLE_ADMIN 能够访问所有 ROLE_USER 和 ROLE_ADMIN 受保护的路由,但让 ROLE_USER 只能访问它自己的路由。 (Docs)
    3. 您仍然可以创建侦听器,但它会为您完成

    【讨论】:

    • 如果用户不是 IS_AUTHENTICATED_FULLY,那么访问权限如何?如果用户登录或不编写事件侦听器,这是否也可以与检查每个控制器不同?
    • 我很确定 IS_AUTHENTICATED_FULLY 只是一个和其他角色(USER_ADMIN、USER_MEMBER 等)一样的角色,所以你可以以同样的方式对待。
    猜你喜欢
    • 2013-02-23
    • 2014-04-26
    • 2015-10-14
    • 1970-01-01
    • 1970-01-01
    • 2013-02-27
    • 2011-08-19
    • 2019-10-31
    • 2012-10-17
    相关资源
    最近更新 更多