[英]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.