我正在使用Symfony 3,我已经创建了一个自定义的Voter类.
我想使用SensioFrameworkExtraBundle @Security标记访问它.
它有点工作.
如果我执行以下操作,它将完美运行:
/** * @Rest\Get("organisation/{id}") * @Security("is_granted('OrgAdmin',id)") * @param int $id * @param Request $request * * @return View */ public function getOrganisationAction($id,Request $request) {
但是我不喜欢在应用程序中使用魔术字符串的想法,我宁愿使用类常量来进行检查.
像这样的东西:
/** * @Rest\Get("organisation/{id}") * @Security("is_granted(AppBundle\OrgRoles::ROLE_ADMIN,Request $request) {
但是当我尝试时,我收到以下错误消息:
Unexpected character \"\\\" around position 20 for expression `is_granted(AppBundle\\OrgRoles::ROLE_ADMIN,id)`.
未转义时,如下:
Unexpected character "\" around position 20 for expression `is_granted(AppBundle\OrgRoles::ROLE_ADMIN,id)`.
所以我很难过.
可以吗?
有关更好的方法的任何建议吗?
您可以使用Expression Language Component中提供的
constant()
函数:
@Security("is_granted(constant('\\Full\\Namespace\\To\\OrgRoles::ROLE_ADMIN'),id)")