2011-05-02 37 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

相关问题