Моя команда пытается настроить WebDAV, чтобы пользователи могли делиться доступом к определенным файлам, если пользователи принадлежат к одному проекту, но в противном случае скрыть / заблокировать доступ.
Читая документы, мы думаем, что настраиваем его правильно, но продолжаем получать эту ошибку при аутентификации.
http://newui.proloop.com/dav/
рикатех
пароль (не волнуйтесь, здесь ничего ценного)
This XML file does not appear to have any style information
associated with it. The document tree is shown below.
<d:error xmlns:d="DAV:" xmlns:s="http://sabredav.org/ns">
<s:sabredav-version>3.2.0</s:sabredav-version>
<s:exception>Sabre\DAV\Exception\NotFound</s:exception>
<s:message>File not found: rickatech in 'principals'</s:message>
</d:error>
<d:error xmlns:d="DAV:" xmlns:s="http://sabredav.org/ns">...</d:error>
... / dav / index.php
<?php
namespace LawLoop;
date_default_timezone_set('UTC');
require '../vendor/autoload.php';
use Sabre\DAV;
use Sabre\DAV\FSExt;
use Sabre\DAV\FSExt\File;
use Sabre\DAV\Auth;
use Sabre\DAVACL\FS\HomeCollection;
function PSQLParams()
{
$host = 'proloop.ckyj1meiloyg.us-east-1.rds.amazonaws.com';
$port = 5432;
$dbname = '[redacted]';
$username = '[redacted]';
$password = '[redacted]';
$dsn = "pgsql:host={$host};port={$port};dbname={$dbname}";
return array(
'host' => $host,
'port' => $port,
'dbname' => $dbname,
'username' => $username,
'password' => $password,
'dsn' => $dsn
);
}
$dbparams = PSQLParams();
$db = new \PDO($dbparams['dsn'], $dbparams['username'], $dbparams['password']);
$db->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
$aclPlugin = new \Sabre\DAVACL\Plugin();
$aclPlugin->hideNodesFromListings = true;
$aclPlugin->defaultUsernamePath = 'principals/users';
$aclPlugin->adminPrincipals[] = 'principals/admin';
$authBackend = new \Sabre\DAV\Auth\Backend\PDO($db);
$principalBackend = new \Sabre\DAVACL\PrincipalBackend\PDO($db);
$principalsCollection = new \Sabre\DAV\SimpleCollection('principals', [
new \Sabre\DAVACL\PrincipalCollection($principalBackend, 'principals/users')//,
// new \Sabre\DAVACL\PrincipalCollection($principalBackend, 'principals/projects'),
// new \Sabre\DAVACL\PrincipalCollection($principalBackend, 'principals/organizations')
]);
$home = new HomeCollection($principalBackend,'/efs/users');
$projects = new HomeCollection($principalBackend,'/efs/dav/projects');
$projects->collectionName = 'projects';
$organizations = new HomeCollection($principalBackend,'/efs/dav/organizations');
$organizations->collectionName = 'organizations';
$tree = [
$home, $projects, $organizations, $principalsCollection
];
$server = new DAV\Server($tree);
// ver->setBaseUri("/servref/server.php");
$server->setBaseUri("/dav/");
$lockBackend = new DAV\Locks\Backend\PDO($db);
$lockPlugin = new DAV\Locks\Plugin($lockBackend);
$authBackend = new Auth\Backend\PDO($db);
// We're assuming that the realm name is called 'ProLoop'.
$authBackend->setRealm('dav');
// Creating the plugin.
$authPlugin = new Auth\Plugin($authBackend);
// Adding the plugin to the server.
$server->addPlugin($authPlugin);
$server->addPlugin($aclPlugin);
$server->addPlugin($lockPlugin);
$server->addPlugin(new DAV\Browser\Plugin());
$server->exec();
Я также разместил это в StackOverflow, поскольку я не уверен, что это вопрос кодирования или конфигурация службы. https://stackoverflow.com/questions/43060444/webdav-sabre-io-php-enables-group-methods-throwing-errors
У sabre.io есть форум поддержки, но я чувствую, что это то, что люди StackExchange могли бы лучше понять. https://groups.google.com/forum/#!topic/sabredav-discuss/MSSjwccjuP8
В итоге мы просто написали наш собственный обработчик коллекции, который проверяет текущего пользователя, вошедшего в систему, по некоторым таблицам, которые мы управляем членством в группах / проектах.
sabre.io на самом деле не показывает, насколько это просто сделать, поэтому потратил много времени, пытаясь увидеть, есть ли уже передовая практика, не смог ее найти, поэтому просто написал наш собственный, и он отлично работает.