[英]How to grant a role to a user during development?
是否可以动态地将角色授予当前用户(我)?
我正在本地计算机上的网站上工作,一台服务器托管着该网站的生产版本。 这两个版本( dev
和prod
)使用的身份验证系统使用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捆绑软件从数据库中加载任何用户。
解决方案是更改配置文件,以便在dev
和prod
环境中使用不同的登录控制器:
app / config / security.yml :将在其中加载变量的位置
security:
[...]
providers:
%security_providers%
firewalls:
dev:
[...]
user_manager: %security_firewalls_user_management%
app / config / config_dev.yml和app / 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
仅在dev
和test
环境中加载,它使用传统的登录表单并显示我无法模拟的用户列表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.