我今天详细介绍了CakePHP Acl和Auth组件的教程和示例。我将Auth组件配置为使用$this->Auth->authorize = 'actions'
。有了这个,我能够成功地限制对特定站点操作的访问而没有问题。
但是,我的应用程序需要超出此范围,我不确定如何最好地实现此应用程序的目标。
在我使用CakePHP 1.3.8开发的应用程序中,有特定的“站点功能”。例如,应用程序的用户将能够相互发送消息。
我想将每封邮件视为ACO,以便我可以控制谁可以查看或删除邮件。
另一个网站功能是为实现某些目标而获得“徽章”。对于这些徽章,我想把它们当作ACO来锁定和解锁这些徽章。
我不认为我可以使用CakePHP的开箱即用ACL功能来实现这一点,因为这不仅限制了对操作的访问。我正在寻找有关如何最好地实现此功能的任何想法。
答案 0 :(得分: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
}
关于徽章,我会在User
和Badge
之间寻找常规的HABTM(HasAndBelongsToMany)关系。当User
达到某个目标时,您会拨打Badge::unlock($badge, $user)
这样的电话,将用户的新徽章保存到users_badges
联接表。
从那里你可以做基本的事情,比如列出某个用户的所有徽章等等。
答案 1 :(得分:0)
我对Cake的Acl组件进行了更加接近的研究,并认为我可以编写一些类似于我的内部“功能”访问控制的功能。我的想法是我可以有一个Faro(功能访问请求对象),Faco和Facos_Faros表。 Faco和Faro将建立HABTM关系。然后我可以创建自己的组件来管理它。