MihailDev / yii2-elfinder

Yii2 ElFinder
Other
171 stars 76 forks source link

Защита от несанкционированного доступа #99

Open seether13 opened 6 years ago

seether13 commented 6 years ago

Здравствуйте. Использую Ваш компонент ElFinder совместно с CKEditor. При использовании mihaildev\elfinder\Controller для создания директорий пользователей на основе их id получаю адресную строку вида: http://redactor.local/index.php?r=elfinder%2Fmanager&filter=image&CKEditor=article-text&CKEditorFuncNum=1&langCode=ru#elf_l1_XA При использовании mihaildev\elfinder\PathController подключаю в _form.php как виджет:

    <?= $form->field($model, 'text')->widget(CKEditor::className(), [
        'editorOptions' => ElFinder::ckeditorOptions(['elfinder', 'path' => $model->id, 'type' => 'article'],[
            'preset' => 'full',
            'inline' => false, 
        ]),
    ]); ?>

получаю адресную строку вида: http://redactor.local/index.php?r=elfinder%2Fmanager&path=2&type=article&filter=image&CKEditor=article-text&CKEditorFuncNum=1&langCode=ru#elf_l1_XA для создания директорий на основе 'path' , таким образом подставляя в адресной строке вручную эту переменную любой зарегистрированный пользователь может попасть в любую папку. Отсюда два вопроса:

  1. Каким образом можно сделать проверку и разрешить доступ автору (по полю created_by в модели) или модератору.
  2. Как использовать переменную type=article для создания директорий например создавать папку на основе type\path (article\2). Настройки

    'controllerMap' => [
        'elfinder' => [
            'class' => 'mihaildev\elfinder\PathController',
            'disabledCommands' => ['netmount'], //отключение ненужных команд https://github.com/Studio-42/elFinder/wiki/Client-configuration-options#commands 
            'root' =>  [
                    'access' => ['read' => '*', 'write' => 'updateOwnPost'],
                    'path'  => 'path',
                    'name'  => 'My Documents'
    
            ],
    
        ]
    ],

    Роли

    <?php
    return [
    'updateOwnPost' => [
        'type' => 2,
        'description' => 'Update own post',
        'ruleName' => 'isAuthor',
        'children' => [
            'updatePost',
        ],
    ],
    'createPost' => [
        'type' => 2,
        'description' => 'Create a post',
    ],
    'updatePost' => [
        'type' => 2,
        'description' => 'Update post',
    ],
    'user' => [
        'type' => 1,
        'description' => 'User',
        'children' => [
            'updateOwnPost',
        ],
    ],
    'admin' => [
        'type' => 1,
        'description' => 'Admin',
        'children' => [
            'updatePost',
            'user',
        ],
    ],
    ];

    При таких настройках все директории закрыты даже для автора

MihailDev commented 6 years ago

немного не так надо делать! надо через UserPath так удобнее