eltharin / webdav
symfony的WebDav包
README
什么是WebDav包?
此包允许在symfony应用程序中创建一个WebDav服务器,您可以使用相同的凭据并具有相同的ACL逻辑。
安装
- 使用composer要求此包
composer require eltharin/webdav
然后添加一个文件以添加路由加载器
eltharin_webdav: resource: Eltharin\WebdavBundle\Routing\Loader type: service
此文件位于/vendor/eltharin/webdav/config/routes,并将其放入/config/routes
如果您想至少为您的配置之一启用基本验证器,您必须在security.yaml中添加一个防火墙
webdav: request_matcher: Eltharin\WebdavBundle\Security\WebdavRequestMatcher custom_authenticator: Eltharin\WebdavBundle\Security\WebdavAuthenticator entry_point: Eltharin\WebdavBundle\Security\WebdavAuthenticationEntryPoint
配置
- 创建一个配置,对于WebDav空间,您可以有任意多的配置,每个配置必须以一个启动命令开始
开始创建扩展Eltharin\WebdavBundle\Interface\AbstractWebDavConfiguration的PHP类,您有两个stub来实现,getRouteData和getFileManager
class WebDavConfiguration extends AbstractWebDavConfiguration { public function getRouteData(): RouteData { // TODO: Implement getRouteData() method. } public function getFileManager(): FileManagerInterface { // TODO: Implement getFileManager() method. } }
RouteData是一个表示获取此WebDav端点的路由的对象。它看起来像是基本的symfony路由配置,您必须设置访问此端点的路径,并且可以设置要求。
WebDav文件路径将设置在这个字符串的末尾,不要调用您的变量路径。
public function getRouteData(): RouteData { return new RouteData('/webdav'); }
或者
public function getRouteData(): RouteData { return new RouteData('/webdav/{uuid}', ['uuid' => '\d+']); }
生成的路由将是/webdav/{path}和/webdav/{uuid}/path,其中path将是.*,path可以包含/字符以表示子文件夹。
有一个用于在磁盘上存储文件的fileManager,根文件夹可配置。例如:%root%/var/data/,创建此目录并添加fileManager配置
public function getFileManager(): FileManagerInterface { $fileManager = new WebDavFileManager(); $fileManager->setConfig($this->appKernel->getProjectDir() . DIRECTORY_SEPARATOR . 'var' . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR, $this->requestStack->getMainRequest()?->getSchemeAndHttpHost() ?? '' , '/' . $this->getRouteData()->getPath()); return $fileManager; }
然后我们有我们的配置
use Eltharin\WebdavBundle\FileManager\WebDavFileManager; use Eltharin\WebdavBundle\Interface\AbstractWebDavConfiguration; use Eltharin\WebdavBundle\Interface\FileManagerInterface; use Eltharin\WebdavBundle\Routing\RouteData; use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\HttpKernel\KernelInterface; class WebDavConfiguration extends AbstractWebDavConfiguration { public function __construct(private KernelInterface $appKernel, private RequestStack $requestStack) { } public function getRouteData(): RouteData { return new RouteData('/webdav'); } public function getFileManager(): FileManagerInterface { $fileManager = new WebDavFileManager(); $fileManager->setConfig($this->appKernel->getProjectDir() . DIRECTORY_SEPARATOR . 'var' . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR, $this->requestStack->getMainRequest()?->getSchemeAndHttpHost() ?? '' , $this->getRouteData()->getPath() ); return $fileManager; } }
添加更多安全
为了添加安全,WebDAV包包括用于基本认证的验证器和入口点,验证您是否已如安装部分所述添加了防火墙。
在您想要添加安全的配置中,您必须在构造函数中添加安全管理器以填充$securityManager变量
public function __construct(private KernelInterface $appKernel, private RequestStack $requestStack, BasicAuthManager $authManager) { $this->securityManager = $authManager; }
并在您的security.yaml文件中添加一个access_control项
access_control: - { path: ^/webdav, roles: ROLE_USER }
现在您必须连接到ROLE_USER才能访问您的文件。
如果您想要更多的安全级别,您可以扩展WebDavFileManager类并实现checkAutorization函数或编写自己的类。
待办事项
- 数据库文件管理器
- CalDav CardDav