0

少し論理的な助けが必要です。http/php/post 経由で大量のファイルをアップロードするフォルダーがあります。アップロード時に、MongoDB のコレクションにインデックスを作成します。ファイルをさまざまなフォルダーに整理する必要があります。実際にはフォルダーはありませんが、誰かがインターフェイスを表示すると、ファイル ツリーのようにまとめられます。また、仮想フォルダーへのアクセス許可も設定します。ファイルを仮想フォルダーにインデックス付けして Mongo Collection にする方法を何度も考えてきましたが、各ユーザーにアクセス許可を割り当てることで行き詰まりました。次のようなファイルと仮想フォルダーのインデックスを作成することを考えていました (長いコードで申し訳ありませんが、ファイル ツリーがどれだけ深くなるかについてのアイデアを提供しようとしています)。

$collection->insert(array(
    '_id' => new MongoID(),
    'type' => 'folder',
    'folderOrFileNameAndLocation' => 'products'
));
$collection->insert(array(
    '_id' => new MongoID(),
    'type' => 'folder',
    'folderOrFileNameAndLocation' => 'products/device'
));
$collection->insert(array(
        '_id' => new MongoID(),
        'type' => 'folder',
        'folderOrFileNameAndLocation' => 'products/device/manuals'
    ));

$collection->insert(array(
        '_id' => new MongoID(),
        'type' => 'file',
        'fileName' => 'theManual.pdf',
        'location' => 'products/device/manuals/'
    ));

私の問題は、ユーザーを追加するときに各ユーザーのフォルダーにアクセス許可を割り当てる方法です。これが私が考えていたことです

$collection->insert(array(
        '_id' => new MongoID(),
        'username' => 'Joe',
        'password' => '1234', //will obviously be one way hashed
        //STORE AS A STRING
        'permissibleFolders' => 'products/device/manuals/, software/latest/'
    ));

    //OR SHOULD I DO IT THIS WAY???

    $collection->insert(array(
        '_id' => new MongoID(),
        'username' => 'Joe',
        'password' => '1234', //will obviously be one way hashed
        'permissibleFolders' => array(
            //DO I HAVE TO SET A KEY FOR THIS OR CAN I JUST ADD THEM IN?
            products/device/manuals/,
            software/latest/
        )
    ));

そのようにして、ユーザーに割り当てられたフォルダーをどのようにクエリしますか? これは私が考えていたことですが、最後の部分を照会するにはどうすればよいですか? ネストされたクエリで機能させることはできますが、それは私が決してやろうとしないことです。

$pulledData = $collection->find(array('username' => $username, 'password' => $password));
        $doesExist = $pulledData -> count();
        if($doesExist == 1){
            logUserInAndStuff();
            foreach($pulledData as $row){
                $accessibleFolders = $row['permissibleFolders'];
            }
            //HOW DO I MAKE THIS QUERY THE PROPER FOLDERS?
            $pulledData = $collection->find(array('folderNameAndLocation'=>$accessibleFolders));

        }

私の論理がばかげている場合は申し訳ありませんが、サーバーとの「プル」と許可されていることは非常に限られています。私は何も与えられず、何か壮大なものでやり遂げることが期待されていました. 誰かが私を思いつくのを助けることができるこれを行うためのより良い方法は素晴らしいでしょう! 私はnoSQLにかなり慣れていないので、構造を考えすぎているかもしれません笑。

4

1 に答える 1