[Security] added support for custom expression language functions
This commit is contained in:
parent
79bcd52b6b
commit
1a39046e8b
@ -25,7 +25,8 @@ class ExpressionLanguage extends BaseExpressionLanguage
|
||||
{
|
||||
public function __construct(ParserCacheInterface $cache = null, array $providers = array())
|
||||
{
|
||||
$providers[] = new ExpressionLanguageProvider();
|
||||
// prepend the default provider to let users overide it easily
|
||||
array_unshift($providers, new ExpressionLanguageProvider());
|
||||
|
||||
parent::__construct($cache, $providers);
|
||||
}
|
||||
|
@ -12,46 +12,22 @@
|
||||
namespace Symfony\Component\Security\Core\Authorization;
|
||||
|
||||
use Symfony\Component\ExpressionLanguage\ExpressionLanguage as BaseExpressionLanguage;
|
||||
use Symfony\Component\ExpressionLanguage\ParserCache\ParserCacheInterface;
|
||||
|
||||
/**
|
||||
* Adds some function to the default ExpressionLanguage.
|
||||
*
|
||||
* @author Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* @see ExpressionLanguageProvider
|
||||
*/
|
||||
class ExpressionLanguage extends BaseExpressionLanguage
|
||||
{
|
||||
protected function registerFunctions()
|
||||
public function __construct(ParserCacheInterface $cache = null, array $providers = array())
|
||||
{
|
||||
parent::registerFunctions();
|
||||
// prepend the default provider to let users overide it easily
|
||||
array_unshift($providers, new ExpressionLanguageProvider());
|
||||
|
||||
$this->register('is_anonymous', function () {
|
||||
return '$trust_resolver->isAnonymous($token)';
|
||||
}, function (array $variables) {
|
||||
return $variables['trust_resolver']->isAnonymous($variables['token']);
|
||||
});
|
||||
|
||||
$this->register('is_authenticated', function () {
|
||||
return '$token && !$trust_resolver->isAnonymous($token)';
|
||||
}, function (array $variables) {
|
||||
return $variables['token'] && !$variables['trust_resolver']->isAnonymous($variables['token']);
|
||||
});
|
||||
|
||||
$this->register('is_fully_authenticated', function () {
|
||||
return '$trust_resolver->isFullFledged($token)';
|
||||
}, function (array $variables) {
|
||||
return $variables['trust_resolver']->isFullFledged($variables['token']);
|
||||
});
|
||||
|
||||
$this->register('is_remember_me', function () {
|
||||
return '$trust_resolver->isRememberMe($token)';
|
||||
}, function (array $variables) {
|
||||
return $variables['trust_resolver']->isRememberMe($variables['token']);
|
||||
});
|
||||
|
||||
$this->register('has_role', function ($role) {
|
||||
return sprintf('in_array(%s, $roles)', $role);
|
||||
}, function (array $variables, $role) {
|
||||
return in_array($role, $variables['roles']);
|
||||
});
|
||||
parent::__construct($cache, $providers);
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,58 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Security\Core\Authorization;
|
||||
|
||||
use Symfony\Component\ExpressionLanguage\ExpressionFunction;
|
||||
use Symfony\Component\ExpressionLanguage\ExpressionFunctionProviderInterface;
|
||||
|
||||
/**
|
||||
* Define some ExpressionLanguage functions.
|
||||
*
|
||||
* @author Fabien Potencier <fabien@symfony.com>
|
||||
*/
|
||||
class ExpressionLanguageProvider implements ExpressionFunctionProviderInterface
|
||||
{
|
||||
public function getFunctions()
|
||||
{
|
||||
return array(
|
||||
new ExpressionFunction('is_anonymous', function () {
|
||||
return '$trust_resolver->isAnonymous($token)';
|
||||
}, function (array $variables) {
|
||||
return $variables['trust_resolver']->isAnonymous($variables['token']);
|
||||
}),
|
||||
|
||||
new ExpressionFunction('is_authenticated', function () {
|
||||
return '$token && !$trust_resolver->isAnonymous($token)';
|
||||
}, function (array $variables) {
|
||||
return $variables['token'] && !$variables['trust_resolver']->isAnonymous($variables['token']);
|
||||
}),
|
||||
|
||||
new ExpressionFunction('is_fully_authenticated', function () {
|
||||
return '$trust_resolver->isFullFledged($token)';
|
||||
}, function (array $variables) {
|
||||
return $variables['trust_resolver']->isFullFledged($variables['token']);
|
||||
}),
|
||||
|
||||
new ExpressionFunction('is_remember_me', function () {
|
||||
return '$trust_resolver->isRememberMe($token)';
|
||||
}, function (array $variables) {
|
||||
return $variables['trust_resolver']->isRememberMe($variables['token']);
|
||||
}),
|
||||
|
||||
new ExpressionFunction('has_role', function ($role) {
|
||||
return sprintf('in_array(%s, $roles)', $role);
|
||||
}, function (array $variables, $role) {
|
||||
return in_array($role, $variables['roles']);
|
||||
}),
|
||||
);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user