我需要检查登录用户是否在系统上具有某些角色,因此我允许或不允许某些操作。我正在使用JMSSecurityExtraBundle并检查Expression Based Authorization的文档,但由于代码无效,我做错了。看看这段代码:
use JMS\SecurityExtraBundle\Annotation\Secure;
use JMS\SecurityExtraBundle\Security\Authorization\Expression\Expression;
if ($this->get('security.context')->isGranted(array(new Expression('hasRole("ROLE_ADMIN")')))) {
echo "Enter";
} else {
echo "Do not enter";
}
但是当我登录时,即使是具有所有权限且具有ROLE_ADMIN的ADMIN,我唯一看到的文字是"不要输入"这是完全错误的。在here中作为解释的示例代码中,作者使用$securityContext
var但它来自何处?这个var定义在哪里?我认为它会指向SecurityContext,但我不太确定,我的代码问题在哪里?如何检查用户是否具有某个角色,从而允许它执行某些代码?
答案 0 :(得分:1)
如果您只是想检查用户在控制器中的角色,那么您不需要使用注释表达式,这就足够了:
if ($this->get('security.context')->isGranted('ROLE_ADMIN')) {
echo "Enter";
} else {
echo "Do not enter";
}
谷歌上的一个快速搜索会立即返回关于该文档的文档部分:http://symfony.com/doc/current/book/security.html#access-control
答案 1 :(得分:1)
我允许或不允许某些行动。
如果您指的是控制器中的常规操作,那么便捷的快捷方式是使用来自SensioFrameworkExtraBundle
的@Security注释。
/**
* @Security("has_role('ROLE_ADMIN')")
*/
public function indexAction()
{
// ...
}
但是,这并不是你应该如何在Symfony 2中开发基于roled的动作的方法。你可以在access_control中定义它。
# app/config/security.yml
security:
# ...
access_control:
- { path: ^/admin/users, roles: ROLE_SUPER_ADMIN }
- { path: ^/admin, roles: ROLE_ADMIN }