使用注释保护Symfony2控制器的操作免受未经授权的请求
我找不到方法来保护一个 Controller
的 Action
,当用户没有登录时,想用自定义的 注解 来实现。
我想达到的效果是:
...
class FooController extends Controller
{
...
/*
* The code bellow should only be executed if the user
* is authorized, otherwise should throw an exception
* or something.
*
* @Authorized
*/
public function barAction($cid) {
// do stuff only if user is authorized
}
...
}
我知道可以用某种 "装饰者设计模式" 来实现,但我其实更想要的是像 Python 的 装饰器那样,使用 PHP 的 注解。
这可能吗?我该怎么做?
1 个回答
5
如果你在使用 SensioFrameworkExtraBundle,你可以通过 给控制器类添加注解 来实现安全控制。举个例子,
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
class PostController extends Controller
{
/**
* @Security("has_role('ROLE_ADMIN')")
*/
public function indexAction()
{
// ...
}
}
另外一个选择是使用 JMSSecurityExtraBundle 来 保护你的服务层,比如说,
namespace Acme\HelloBundle\Newsletter;
use JMS\SecurityExtraBundle\Annotation\Secure;
// ...
class NewsletterManager
{
/**
* @Secure(roles="ROLE_NEWSLETTER_ADMIN")
*/
public function sendNewsletter()
{
// ...
}
// ...
}