2011-04-04 102 views
5

我開始一個項目和我使用symfony,我第一次與symfony,其實真的很棒,我已經安裝了sfDoctrineGuardPlugin,一切正常,直到現在,爲什麼呢?,因爲前端用戶可以在後臺登錄,反之亦然,我不想這樣,所以,我開始谷歌,我在這裏發現Symfony sfDoctrineGuardPlugin custom login query在SO,但我不知道我應該在哪裏放置這個功能,所以我沒有測試過它。獨立的前端和後端用戶與sfDoctrineGuardPlugin

因爲我不希望前端用戶可以在後端登錄,我想我可以使用憑據,我可以嗎?但是,symfony在登錄後檢查用戶憑據,我不希望他們都沒有,那麼,我該如何實現這一目標?也許如果我可以在會話中擁有名稱空間,我可以檢查後端名稱空間中的管理員也適用於前端用戶,所以他們從來沒有固定,我想。

我不知道是否真的知道sfDoctrineGuardPlugin是否有一些可以管理這種情況的配置,存在這樣的配置?

另外,在我的後端,我希望有一個頁面來管理前端用戶,其他用於後端用戶,因爲前端用戶將有一個配置文件和地址,認爲這是更容易,但我不知道從哪裏開始。

需要一些幫助,在這裏

感謝

+0

雖然,你想出了一個合理的答案。我建議你先分析一下你是否真的需要2個獨立的應用程序。雖然這可能是合乎邏輯的,但您很快會發現在應用程序之間重複使用代碼很困難,但國際化和測試存在一個問題。我發現擁有1個應用程序要容易得多。僅供參考,Symfony2也沒有「應用」的概念。 – Dziamid 2011-04-12 21:56:22

回答

2

幾天編碼後,我能完全按照我的意願去做,我要分享我的解決方案:
我以在SO這裏找到的一個例子開始,你可以在這裏閱讀這篇文章:
Symfony sfDoctrineGuardPlugin custom login query 它給了我一個想法,我執行了,所以,我創建\ LIB \ Util.class.php,具有的功能,一個用於查詢後臺用戶和另一個用於前端用戶

static public function retrieveCustomer($username, $isActive = true) 
{ 
    $query = Doctrine_Core::getTable('sfGuardUser')->createQuery('u') 
    ->leftJoin('u.Groups g') 
    ->leftJoin('g.Permissions p') 
    ->where('u.username = ?', $username) 
    ->addWhere('u.is_active = ?', $isActive) 
    ->addWhere('g.name = ?', 'customers'); 

    return $query->fetchOne(); 
} 

static public function retrieveAdmin($username, $isActive = true) 
{ 
    $query = Doctrine_Core::getTable('sfGuardUser')->createQuery('u') 
    ->leftJoin('u.Groups g') 
    ->leftJoin('g.Permissions p') 
    ->where('u.username = ?', $username) 
    ->addWhere('u.is_active = ?', $isActive) 
    ->whereIn('g.name', array('administrators','operators')); 

    return $query->fetchOne(); 
} 

現在,在每個應用程序的app.yml,我現在覆蓋插件

#Example for apps/backend/config/app.yml 
all: 
    sf_guard_plugin: 
     retrieve_by_username_callable: Util::retrieveAdmin 

直到默認查詢一切都很好,但我開始面對另一個問題,所以我打開一個新的線程: Overwriting isAuthenticated() in symfony在那裏我得到了我的解決方案的最後一步,這是爲每個應用程序設置型動物會話名稱,因此,在每個應用程序的factories.yml

#apps\backend\config\factories.yml 
storage: 
    class: sfSessionStorage 
    param: 
    session_name: backend 

現在所有設置,前端的用戶不能在後端應用程序登錄,反之亦然。

隨時發表評論

0

最常見的方法是通過證書,我backend應用security.yml樣子:

all: 
    is_secure: on 
    credentials: [login_backend] 
+0

感謝您的答案,但憑據在用戶登錄後被檢查,我不希望這樣,因爲你可以登錄,只是不能訪問這個應用程序,在我的情況下,我的整個前端應用程序是不安全的,只是某些頁面,如果我使用憑據,用戶看起來像是在不安全的頁面中,並且我不希望 – 2011-04-04 18:36:16