使用注释保护Symfony2控制器的操作免受未经授权的请求

0 投票
1 回答
512 浏览
提问于 2025-04-18 06:36

我找不到方法来保护一个 ControllerAction,当用户没有登录时,想用自定义的 注解 来实现。

我想达到的效果是:

...
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()
    {
        // ...
    }

    // ...
}

撰写回答