Хуки Owncloud postCreate / post_create не выполняются для других пользователей в общих папках

#php #hook #owncloud #nextcloud

#php #перехват #owncloud #nextcloud

Вопрос:

Мы разрабатываем приложение ownCloud, в котором мы пытаемся отслеживать пользователя, который загружает файл в определенную папку. перехваты работают для администратора, но перехват не выполняется, когда другой пользователь загружает в общую папку. это проблема с разрешениями?

наш код регистрации перехвата. мы пробуем обе системы перехватов, но результат тот же.

 public function register() {

        OCPUtil::connectHook('OC_Filesystem', 'post_create', 'OCAFileActivitiesControllerUserHooks', 'onFileCreate');
                
        $reference = $this;

        $callback = function (Node $node) use($reference) {
            $reference->onPostCreate($node);
        };

       
        $this->fileManager->listen('OCFiles', 'postCreate', $callback);

    }
  

Ответ №1:

Хорошо, если кто-то ищет ответ на тот же вопрос, я понял это. как следует.

в вашем app.php

 namespace OCAxxxxxxxxxxAppInfo;

$app = new Application();
$app->registerFilesActivity();

  

и в вашей библиотеке / AppInfo/

 namespace OCAXXXXXXXXXXXXAppInfo;

use OCPAppFrameworkApp;
use OCAXXXXXXXXXXXXControllerUserHooks;
use OCPIContainer;
use OCPUtil;

class Application extends App {
    public function __construct(array $urlParams=array()){
        parent::__construct('viewfinance', $urlParams);

        $container = $this->getContainer();                
        $container->registerService('UserHooks', function($c) {
                     
            return new UserHooks(
                $c->query('AppName'),
                $c->query('Request'),
                $c->query('UserSession'),
                $c->query('ServerContainer')->getRootFolder()
            );
        });

        $container->registerService('UserSession', function($c) {
            return $c->query('ServerContainer')->getUserSession();
        });
    }

    /**
     * Register the hooks for filesystem operations
     */
    public function registerFilesActivity() {
        
        Util::connectHook('OC_Filesystem', 'post_create', 'OCAFileActivitiesControllerUserHooks', 'onFileCreate');
        
    }
}
  

В документации не очень понятно, после проверки нескольких других приложений с аналогичными функциями я понял это.