我现在使用cakephp一段时间,刚开始使用ACL。除了一件事,我已经把它搞定了。如何查找当前用户可用的所有文档?
我在Aros表中设置了几个组(超级用户,管理员和一般用户)。我有几个文件应该是超级用户和管理员都可以访问的,但只有特定的文件可供普通用户访问。我想出的最接近的事情是:
$this->data=$this->Document->find('all',array('fields'=>array('Document.id','Document.filename','Document.title')));
foreach($this->data as $i=>$document){
if($this->Acl->check(array('model'=>'User','foreign_key'=>$this->Session->read('User.id')),array('model'=>'Document','foreign_key'=>$document['Document']['id']))!=1){
unset($this->data[$i]);
}
}
上述“解决方案”的问题在于它首先查询所有文件(在不久的将来会成千上万),然后通过从$ this-删除所有无法访问的文件将其归结为可能的几个文件。 >数据数组......
答案 0 :(得分:0)
您可以在用户模型上创建一个findAccessibleDocuments
方法,直接查询数据库。您必须弄清楚ACL表的结构才能提出查询。
class User extends AppModel {
...
public function findAccessibleDocuments($userId = null){
if (!$userId) $userId = $this->getID;
return $this->query(/* select acos inner joining aros_acos and aros in which $userId is in. Optionally, you can inner join with Document to get more than their ids */);
}
对不起,我不能给你完整的答案,但我现在很急,你可以继续工作,我会稍后再回过头来看看它是怎么回事,也许可以帮到你更多。