フレームワークのない PHP アプリケーションに Symfony 2.0 ACL を追加しようとしています。セキュリティ コンポーネントをスタンドアロンとして使用する方法に関するドキュメントが不足しているため、私は完全に混乱し、質問に行き詰まりました: 最初にどのクラスを含めるか? インスタンス化するオブジェクトは? 機種やコントローラーがなくても使えますか?
開始方法または適切なリンクに関する提案はありますか?
ありがとう
SilexのSecurityServiceProviderは、すべての重要なコンポーネント サービスを 1 つのファイルに統合するため、開始するのに適しています。サイズは大きいですが、おそらく 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のWebサイト にもACLに関する優れたドキュメントがあります