Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
get_class($object) в случае с doctrine 2 не всегда вернет корректное имя класса, лучше использовать \Doctrine\Common\Util\ClassUtils::getClassisGranted(...) в CLI скриптах (symfony commands/PHPUnit tests)? Там ведь $token не определен.securityContext через new AnonymousToken(...) — но не знаю, павильно ли это.или через Secure аннотацию сервиса.
// ...
if ($secureContext->isGranted('PRICE_PLAN_XXX')) {
// делаем что-то специфическое
}
// ...
// ...
if ($secureContext->isGranted('PRICE_PLAN_YYY')) {
// шлем еще 1 файл
}
// ...
// ...
if ($secureContext->isGranted('PRICE_PLAN_YYY', $user)) {
// шлем еще 1 файл
}
// ...
// /src/Backend/CoreBundle/Security/Authorization/Voter/PrivilegeVoter.php
// ..
public function supportsClass($class)
{
return in_array($class, array(
'Backend\CoreBundle\Entity\SecurityContextResource'
));
}
// ..
// /src/Backend/CoreBundle/Entity/SecurityContextResource.php
namespace Backend\CoreBundle\Entity;
class SecurityContextResource
{
private $resourceId;
public function __construct($resourceId)
{
$this->resourceId = $resourceId;
}
public function getResourceId()
{
return $this->resourceId;
}
}
// /src/Backend/WorkorderBundle/Controller/DefaultController.php
//..
private $resource;
private function getResource()
{
if (!is_object($this->resource))
$this->resource = new SecurityContextResource('/backend/workorder');
return $this->resource;
}
//..
$this->get('security.context')->isGranted('view', $this->getResource())
Еще раз о Security в Symfony2 подход user-resource-privilege