2011-05-02 54 views
0

詳細介紹了CakePHP Acl和Auth組件的教程和示例。我將我的Auth組件配置爲使用$this->Auth->authorize = 'actions'。有了這個,我能夠成功地限制訪問特定的網站操作,而不存在任何問題。如何在CakePHP中爲站點功能構建內部訪問控制

但是,我的應用程序需要超出這一點,我不確定如何最好地實現我的這個應用程序的目標。

在我使用CakePHP 1.3.8開發的應用程序中,有特定的「站點功能」。例如,應用程序的用戶將能夠相互發送消息。

我想將每封郵件視爲ACO,以便我可以控制哪些人可以查看或不能查看或刪除郵件。

另一個網站功能是爲實現特定目標而獲得的「徽章」。對於這些徽章,我希望將它們視爲ACO的鎖定和解鎖徽章。

我不認爲我可以使用CakePHP的開箱即用ACL功能來做到這一點,因爲這不僅限制了對操作的訪問。我正在尋找關於如何最好地實現此功能的任何想法。

回答

0

我研究過Cake的ACL組件更接近想通,我可以寫的東西有點模仿此功能爲我的內部「功能」訪問控制。我的想法是,我可以擁有一個Faro(功能訪問請求對象),Faco和Facos_Faros表。 Faco和Faro將建立HABTM關係。然後,我可以創建自己的組件來管理這一切。

0

使用CakePHP中的標準ACL功能,只能爲控制器操作創建ACO條目。這意味着你的設置(將每一條消息視爲一個單獨的ACO)將不會飛行。與徽章相同。

對於您的消息,我會去做一個設置,如果某個用戶是消息的發件人或接收者,您將在其中查看您的查看/編輯/刪除方法。

喜歡的東西

# in messages_controller 
function view($id) { 
    if(!$isSender($loggedInUserId) || !$isReceiver($loggedInUserId)) { 
     $this->Session->setFlash("You're not allowed to view this message") 
     $this->redirect('index'); 
    } 
    # do view stuff here  
} 
function edit($id) { 
    if(!$isSender($loggedInUserId)) { 
     $this->Session->setFlash("You're not allowed to edit this message") 
     $this->redirect('index'); 
    } 
    # do edit stuff here  
} 

關於徽章,我會去一個UserBadge之間經常HABTM(HasAndBelongsToMany)的關係。當某個User達到某個目標時,您撥打電話Badge::unlock($badge, $user),將用戶的新徽章保存到users_badges連接表中。

從那裏,你可以做基本的東西,如列出所有徽章針對特定用戶等

+0

感謝您的回覆。我仔細研究了Cake的Acl組件,並發現我可以編寫一些類似於我的內部「特性」訪問控制的功能。我的想法是,我可以擁有一個Faro(功能訪問請求對象),Faco和Facos_Faros表。 Faco和Faro將建立HABTM關係。然後,我可以創建自己的組件來管理這一切。您的徽章示例用戶接近我與之交接的位置。最後,我希望能夠控制從一箇中心位置訪問許多網站功能。 – generalopinion 2011-05-03 14:31:48

+0

好的。祝你好運。 – vindia 2011-05-03 15:06:38