我正在尝试找到一种在Symfony2中处理访问控制的好方法。
我的要求:
我已经做过的事情:
检查所有者和角色是没有问题的。我只想以全局方式定义用户必须进行身份验证和异常(可以匿名访问的站点)我想要将它分开(最好通过注释)。 我不想通过路由模式这样做。
答案 0 :(得分:0)
我不确定这是你在找什么,但是你试过Event Listener吗?
您可以在onKernelController方法中进行验证。然后,您可以创建不同的接口并在侦听器中检查控制器的类型。
答案 1 :(得分:0)
类AceBuilderListener实现了EventSubscriber {
private $container;
public function setContainer($container){
$his->container = $container;
}
public function getSubscribedEvents()
{
return array(
Events::prePersist,
Events::preUpdate,
Events::preRemove,
Events::postPersist,
Events::postUpdate,
Events::postRemove,
Events::loadClassMetadata,
);
}
public function prePersist(){ echo( get_class($entity) ); }
public function preUpdate(){ echo( get_class($entity) ); }
public function preRemove(){ echo( get_class($entity) ); }
public function postPersist(){ echo( get_class($entity) ); }
public function postUpdate(LifecycleEventArgs $args)
{
$entity = $args->getEntity();
$entityManager = $args->getEntityManager();
echo get_class($entity);
// perhaps you only want to act on some "Product" entity
if ($entity instanceof Product | x) {
// ... do something with the Product
}
}
public function postRemove(){ die( get_class($entity) ); }
public function loadClassMetadata( LoadClassMetadataEventArgs $args ){
$classMetadata = $args->getClassMetadata();
$entityManager = $args->getEntityManager();
$user = $this->container->get('security.context')->getToken()->getUser();
// you can check here if isGranted();
// and get the entity from the object $classMetadata
$this->container->get('security.context')->isGranted('EDIT', $entity);
}
}