Symfony 2.0中的安全组件是独立的

时间:2012-04-11 10:11:24

标签: php security symfony acl

我正在尝试将Symfony 2.0 ACL添加到我的无框架PHP应用程序中。由于缺乏关于如何独立使用安全组件的文档,我完全感到困惑,而且我遇到了一些问题:首先要包含哪些类?以哪个对象为例?是否可以在没有型号和控制器的情况下使用?

有关如何开始或任何良好链接的任何建议?

谢谢

3 个答案:

答案 0 :(得分:12)

Silex的SecurityServiceProvider可能是一个很好的起点,因为它将所有基本组件服务集成在一个文件中。虽然很大,但你可能会发现它比Symfony2的SecurityBundle更容易消化。

为了保持理智,您应该考虑使用服务容器来组织所有这些对象。在前面提到的类中,Silex Application类是Pimple实例,因此您应该能够轻松地将它移植到独立的Pimple中。我之所以看到这一点,是因为将Pimple服务容器集成到您的应用程序中应该比采用Silex框架更具侵入性。

一旦您拥有必要的安全组件类,您就应该能够跟随ACL documentation并根据需要向容器添加其他服务。此时,SecurityBundle的ACL特定部分可能会有所帮助,因为您可以专注于相关位。请记住,文档中有多个cookbook entries用于ACL。

答案 1 :(得分:2)

首先要包含哪个类?

您很可能需要至少包含部分(如果不是全部)安全核心,然后是您想要使用的ACL实现。您可以查看ACL实现开头列出的依赖项,并查看它们的扩展内容。例如,ACL/DBAL在标题中调用了以下依赖项:

namespace Symfony\Component\Security\Acl\Dbal;

use Doctrine\DBAL\Driver\Connection;
use Doctrine\DBAL\Driver\Statement;
use Symfony\Component\Security\Acl\Model\AclInterface;
use Symfony\Component\Security\Acl\Domain\Acl;
use Symfony\Component\Security\Acl\Domain\Entry;
use Symfony\Component\Security\Acl\Domain\FieldEntry;
use Symfony\Component\Security\Acl\Domain\ObjectIdentity;
use Symfony\Component\Security\Acl\Domain\RoleSecurityIdentity;
use Symfony\Component\Security\Acl\Domain\UserSecurityIdentity;
use Symfony\Component\Security\Acl\Exception\AclNotFoundException;
use Symfony\Component\Security\Acl\Exception\NotAllAclsFoundException;
use Symfony\Component\Security\Acl\Model\AclCacheInterface;
use Symfony\Component\Security\Acl\Model\AclProviderInterface;
use Symfony\Component\Security\Acl\Model\ObjectIdentityInterface;
use Symfony\Component\Security\Acl\Model\PermissionGrantingStrategyInterface;

但是你可能需要检查每个列出的依赖项,并加载它们。

我会追溯依赖关系,并跟踪需要什么。将这些类剔除到一个单独的位置,以便您只拥有所需的内容,并使用一些错误捕获来确定您拥有它们。

哪个对象要实例?

您的ACL。如果依赖关系都已确定并加载,那么您应该能够实例化ACL类对象。

是否可以在没有型号和控制器的情况下使用?

老实说,我不确定在没有大量工作的情况下使用S2之外的ACL是可能的,但是如果你可以用它需要的一切来实例化它,那么你应该能够在没有MVC的情况下使用该对象模型。

不幸的是,根据我对S2的理解,它是一个完整的堆栈框架,并且意味着全有或全无。但如果我打算尝试让它发挥作用,这将是我的方式。

答案 2 :(得分:0)

如果您想了解如何使用symfony2组件以及如何将其集成到您的项目中,请阅读 Fabien Potencier blog 'create your own framework' 帖子肯定会帮助你理解框架的核心以及如何在你的项目中引导symfony2组件

symfony网站上还有ACL的好文档