我正在尝试将 Symfony 2.0 ACL 添加到我的无框架 PHP 应用程序中。由于缺乏关于如何将安全组件作为独立组件使用的文档,我完全感到困惑,并且遇到了一些问题:首先要包含什么类?要实例化哪个对象?是否可以在没有模型和控制器的情况下使用?
关于如何开始或任何好的链接的任何建议?
谢谢
Silex的SecurityServiceProvider可能是一个不错的起点,因为它将所有基本组件服务集成在一个文件中。虽然很大,但您可能会发现它比 Symfony2 的 SecurityBundle 更容易理解。
为了保持理智,您应该考虑使用服务容器来组织所有这些对象。在前面提到的提供程序类中,Silex Application 类是一个Pimple实例,因此您应该能够通过适度的努力将其移植为独立的 Pimple。我看到这一点是因为将 Pimple 服务容器集成到您的应用程序中应该比采用 Silex 框架更具侵入性。
一旦您使基本的安全组件类工作,您应该能够遵循ACL 文档并根据需要向您的容器添加其他服务。此时,SecurityBundle 的 ACL 特定部分可能会有所帮助,因为您可以专注于相关位。请记住,文档中有多个ACL手册条目。
首先要包括什么类?
如果不是全部,您很可能需要至少包含部分安全核心,然后是您想要使用的 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 的理解,它是一个完整的堆栈框架,并且意味着要么全有,要么全无。但如果我要尝试让它发挥作用,这就是我要做的方式。
如果您想了解如何使用 symfony2 组件以及如何将其集成到您的项目中,请阅读Fabien Potencier 博客“创建您自己的框架” 帖子,这肯定会帮助您了解框架的核心以及如何在您的项目中引导 symfony2 组件项目
symfony 网站上 也有很好的ACL文档