繁体   English   中英

在开发过程中如何向用户授予角色?

[英]How to grant a role to a user during development?

是否可以动态地将角色授予当前用户(我)?

我正在本地计算机上的网站上工作,一台服务器托管着该网站的生产版本。 这两个版本( devprod )使用的身份验证系统使用CAS服务器,为了避免在dev环境中使用此身份验证系统,我们更改了防火墙。 但是,在本地工作时,我仅以匿名用户身份登录,防火墙配置为仅当匿名用户从127.0.0.1地址连接时才允许访问管理。 因此,我可以看到管理的任何部分,但是无法在开发过程中模拟来自不同角色的访问。

换句话说,我正在寻找这样的东西:

class AcmeController
{
    public AcmeAction()
    {
        ...
        $user->setRole('ROLE_ADMIN');
        ...
    }
}

或任何其他方式设置角色。

更新:

我测试了这个:

class AcmeController
{
    public AcmeAction()
    {
        ...
        $user = $this->getUser();
        $user->setRole('ROLE_ADMIN');
        ...
    }
}

这带来了致命错误:

致命错误:在第[...]行的[...] AcmeController.php中的非对象上调用成员函数addRole()

我认为这是由于当前用户是匿名用户,因此它在数据库中不存在,并且我无法访问User对象。

我需要通过直接在dev环境中使用User实体,并在prod环境中使用SSO / LDAP捆绑软件从数据库中加载任何用户。

解决方案是更改配置文件,以便在devprod环境中使用不同的登录控制器:

app / config / security.yml :将在其中加载变量的位置

security:
    [...]
    providers:
        %security_providers%
    firewalls:
        dev:
            [...]
        user_manager: %security_firewalls_user_management%

app / config / config_dev.ymlapp / config / config_test.yml :声明变量

登录使用传统的登录表单

parameters:
    security_providers:
        user_db:
            entity:
                class: Acme\AcmeBundle\Entity\User
                property: id
    security_firewalls_user_management:
        pattern:    ^/
        anonymous: ~
        form_login: ~
        logout: ~
        switch_user: true
    login_controller: "AcmeDevBundle:Security:login"

app / config / config_prod.yml :声明变量

parameters:
    security_providers:
        user_auth:
            entity:
                class: Acme\AcmeBundle\Entity\User
                property: other_id
   security_firewalls_user_management:
        pattern: ^/
        anonymous: ~
        trusted_sso:
            manager: user_sso
            login_action: false
            logout_action: false
            check_path: /
            login_path: page_login
        logout: true
        switch_user: true
    login_controller: "AcmeBundle:Main:login"

app / AppKernel.php

class AppKernel extends Kernel
{
    public function registerBundles()
    {
        $bundles = array(
            [...]
        );

        if (in_array($this->getEnvironment(), array('dev', 'test'))) {
            [...]
            # Bundle only activated in dev and test environments
            $bundles[] = new Acme\DevBundle\AcmeDevBundle();
        }

        return $bundles;
    }
[...]

DevBundle仅在devtest环境中加载,它使用传统的登录表单并显示我无法模拟的用户列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM