如何在CakePHP中为站点功能构建内部访问控制

如何在CakePHP中为站点功能构建内部访问控制,cakephp,acl,access-control,Cakephp,Acl,Access Control,今天我详细阅读了关于CakePHP Acl和Auth组件的教程和示例。我将Auth组件配置为使用$this->Auth->authorize='actions'。有了这个,我就可以毫无问题地成功地限制对特定站点操作的访问 然而,我的应用程序需要超出这个范围,我不确定如何最好地实现我的应用程序目标 在我使用CakePHP 1.3.8开发的应用程序中,有一些特定的“站点特性”。例如,应用程序的用户将能够相互发送消息 我想将每条消息视为ACO,这样我就可以控制谁可以、谁不能查看或删除该消息 网站的另一

今天我详细阅读了关于CakePHP Acl和Auth组件的教程和示例。我将Auth组件配置为使用
$this->Auth->authorize='actions'
。有了这个,我就可以毫无问题地成功地限制对特定站点操作的访问

然而,我的应用程序需要超出这个范围,我不确定如何最好地实现我的应用程序目标

在我使用CakePHP 1.3.8开发的应用程序中,有一些特定的“站点特性”。例如,应用程序的用户将能够相互发送消息

我想将每条消息视为ACO,这样我就可以控制谁可以、谁不能查看或删除该消息

网站的另一个特点是为实现某些目标而获得“徽章”。对于这些徽章,我想将其视为ACO,用于锁定和解锁这些徽章


我不认为我可以用CakePHP的开箱即用ACL功能做到这一点,因为这超出了限制对操作的访问。我正在寻找如何最好地实现此功能的想法。

使用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    
}
关于徽章,我想在
用户
徽章
之间建立一种常规的HABTM(hasandbelongtomany)关系。当一个
用户
达到某个目标时,您会发出一个类似于
Badge::unlock($Badge,$User)
的调用,它会将用户的新徽章保存到
users\u badges
联接表中


从那里你可以做一些基本的事情,比如列出某个用户的所有徽章等等。

我更仔细地研究了Cake的Acl组件,并认为我可以编写一些类似于我的内部“功能”访问控制的功能。我的想法是我可以有一个Faro(功能访问请求对象)、Faco和Facos_Faros表。法科和法罗将建立HABTM关系。然后,我可以创建自己的组件来管理所有内容。

谢谢您的回复。我更仔细地研究了Cake的Acl组件,并认为我可以编写一些类似于此功能的东西,用于我的内部“功能”访问控制。我的想法是我可以有一个Faro(功能访问请求对象)、Faco和Facos_Faros表。法科和法罗将建立HABTM关系。然后我可以创建自己的组件来管理所有这些。您的“用户到徽章”示例已接近我的目标。最后,我希望能够从一个中心位置控制对多个站点功能的访问。