Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何检查用户是否具有特定角色,从而允许某些操作?_Php_Symfony_Security Context - Fatal编程技术网

Php 如何检查用户是否具有特定角色,从而允许某些操作?

Php 如何检查用户是否具有特定角色,从而允许某些操作?,php,symfony,security-context,Php,Symfony,Security Context,我需要检查登录用户是否在系统上具有某些角色,以便我允许或不允许某些操作。我使用的是JMSSecurityExtraBundle,我检查了文档,但是我做了一些错误的事情,因为代码不起作用。看看这段代码: use JMS\SecurityExtraBundle\Annotation\Secure; use JMS\SecurityExtraBundle\Security\Authorization\Expression\Expression; if ($this->get('security

我需要检查登录用户是否在系统上具有某些角色,以便我允许或不允许某些操作。我使用的是JMSSecurityExtraBundle,我检查了文档,但是我做了一些错误的事情,因为代码不起作用。看看这段代码:

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";
}

但任何时候我登录,即使是作为拥有所有权限和角色的管理员,我看到的唯一文本是“请勿输入”,这是完全错误的。在作者解释的示例代码中,使用了
$securityContext
var,但它来自哪里?这个变量是在哪里定义的?我假设它会指向,但我不太确定,我的代码哪里出了问题?如何检查用户是否具有特定角色,从而允许其执行某些代码?

如果只想检查用户在控制器中的角色,则不需要使用任何注释表达式,这就足够了:

if ($this->get('security.context')->isGranted('ROLE_ADMIN')) {
    echo "Enter";
} else {
    echo "Do not enter";
}
在谷歌上快速搜索一下,您会立即返回关于这一点的文档部分:

我允许或不允许某些行为

如果您指的是控制器中的常规操作,那么方便的快捷方式是使用
SensioFrameworkExtraBundle
中的@Security注释

/**
 * @Security("has_role('ROLE_ADMIN')")
 */
public function indexAction()
{
    // ...
}
但是,这并不是在Symfony 2中开发基于角色的动作的真正方式。您可以在中定义它


你为什么不直接使用isgrated('ROLE\u ADMIN')?这是怎么回事?你能写一小段代码来理解它吗?这是另一种方式,但如果我有500个控制器,那么我将在
security.yml
上有500行代码,这不是我的想法,我更喜欢通过注释来传递。在另一面,我将检查角色的其他条件,而不是完整的函数,无论如何,谢谢
# app/config/security.yml
security:
    # ...
    access_control:
        - { path: ^/admin/users, roles: ROLE_SUPER_ADMIN }
        - { path: ^/admin, roles: ROLE_ADMIN }