0

私はしばらくの間cakephpを使用しており、ACLを始めたばかりです。1つのことを除いて、私はそれを稼働させています。現在のユーザーが利用できるすべてのドキュメントを見つけるにはどうすればよいですか?

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->data 配列からアクセスできないすべてのドキュメントを削除することによって、潜在的にいくつかのドキュメントにまで下げることです。 ...

4

1 に答える 1

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 */);
    }

申し訳ありませんが、完全な回答を提供することはできませんが、私は今急いでいます。あなたはそれに取り組むことができます.

于 2012-01-01T21:34:00.140 に答える