我正在尝试将Symfony 2.0 ACL添加到我的无框架PHP应用程序中。由于缺乏关于如何独立使用安全组件的文档,我完全感到困惑,而且我遇到了一些问题:首先要包含哪些类?以哪个对象为例?是否可以在没有型号和控制器的情况下使用?
有关如何开始或任何良好链接的任何建议?
谢谢
答案 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的好文档