簡體   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