如果用户属于同一个项目,我的团队正试图让WebDAV安装程序允许用户共享特定文件的访问权限,否则就是隐藏/阻止访问。
阅读文档,我们认为我们正确地设置它,但是在validation时不断得到这个错误。
http://newui.proloop.com/dav/
rickatech
密码(不要担心,这里没有什么价值)
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,因为我不知道这是编码问题还是服务configuration。 https://stackoverflow.com/questions/43060444/webdav-sabre-io-php-enabling-group-methods-throwing-errors
sabre.io有支持论坛,但我觉得这是StackExchange人可能有更多的洞察力。 https://groups.google.com/forum/#!topic/sabredav-discuss/MSSjwccjuP8
所以最后只是写我们自己的自定义集合处理程序,它检查当前login的用户对我们pipe理组/项目成员资格的一些表。
sabre.io并没有真正显示这是多么直接的事情,所以花了很多时间来试图看看是否已经有了一个最佳的实践,找不到一个,所以只写了我们自己的,它工作得很好。