symfony2 access_control真的有用吗?

时间:2013-11-09 12:26:54

标签: php symfony

我想说我有三个角色:

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(或该metter的任何其他自定义角色)?

2)access_control会检查已登录的用户角色,并且假设我是ROLE_ADMIN并尝试访问某个用于ROLE_USER的页面,symfony会处理并说“这不适用于管理员,这是针对用户的” ?

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

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

1 个答案:

答案 0 :(得分:2)

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