-1

我需要检查登录用户是否在系统上具有某些角色,以便我允许或不允许某些操作。我正在使用 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";
}

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

4

2 回答 2

1

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

if ($this->get('security.context')->isGranted('ROLE_ADMIN')) {
    echo "Enter";
} else {
    echo "Do not enter";
}

在 google 上进行一次快速搜索会立即返回您的文档部分:http: //symfony.com/doc/current/book/security.html#access-control

于 2014-11-03T21:35:21.127 回答
1

我允许或不允许某些操作。

如果您的意思是控制器中的常规操作,那么方便的快捷方式是使用来自SensioFrameworkExtraBundle.

/**
 * @Security("has_role('ROLE_ADMIN')")
 */
public function indexAction()
{
    // ...
}

但是,这并不是在 Symfony 2 中开发基于角色的操作的真正方式。您可以在 access_control 中定义

# app/config/security.yml
security:
    # ...
    access_control:
        - { path: ^/admin/users, roles: ROLE_SUPER_ADMIN }
        - { path: ^/admin, roles: ROLE_ADMIN }
于 2014-11-03T22:51:49.643 回答