我对Symfony2中访问控制列表的实现方式感到有些困惑。
在Zend Framework(版本1和2)中,定义了一组资源和一组角色,并为每个角色分配了它可以访问的资源子集。因此,资源和角色是ACL实现的主要词汇,但在Symfony2中并非如此,只有角色起作用。
在遗留应用程序数据库中,我有定义角色列表、资源列表和每个角色允许访问的资源列表(多对多关系)的表。每个用户被分配一个角色(管理员、超级管理员、编辑等)。
我需要在Symfony2应用程序中利用这个数据库。 我的资源看起来像这样:ARTICLE_EDIT、ARTICLE_WRITE、COMMENT_EDIT等。
我的User
实体在Symfony中实现了Symfony\Component\Security\Core\User\UserInterface
接口,因此具有getRoles
方法。
我打算使用这个方法来定义允许的资源,这意味着我将角色用作资源(我指在Zend Framework中称为资源的内容在这里称为角色)。
您确认我应该使用这个方法吗?
这意味着我不再关心每个用户的角色(管理员、编辑等),而只关心它的资源。
然后我会在我的控制器中使用$this->get('security.context')->isGranted('ROLE_ARTICLE_WRITE')
。
这是正确的做法吗?这样做是否绕了一个弯来使用Symfony中的角色?