지금까지 SabreDAV에서 ACL (사용 권한)을 성공적으로 구현할 수 없었습니다.SabreDAV PHP 서버에서 CalDAV 용 사용자 지정 ACL을 구현하는 방법
필자는 Auth, Principal 및 CalDAV 백엔드를 사용하여 코드 이그니 터에서 SabreDAV를 구현했습니다. 컨트롤러에서이 실제 코드 :
구현 권한에서 나의 현재 시도 내 사용자 지정 ACL 플러그인을 완료 한<?php if (! defined('BASEPATH')) exit('No direct script access allowed');
class CalDAV extends CI_Controller {
public function _remap() {
$this->load->library('SabreDAV');
$authBackend = new SabreDAV_DAV_Auth_Backend_Tank_Auth;
$principalBackend = new Sabre_DAVACL_PrincipalBackend_Click4Time;
$calendarBackend = new Sabre_CalDAV_Backend_Click4Time;
// Directory tree
$tree = array(
new Sabre_DAVACL_PrincipalCollection($principalBackend),
new Sabre_CalDAV_CalendarRootNode($principalBackend, $calendarBackend)
);
// The object tree needs in turn to be passed to the server class
$server = new Sabre_DAV_Server($tree);
// You are highly encouraged to set your WebDAV server base url. Without it,
// SabreDAV will guess, but the guess is not always correct. Putting the
// server on the root of the domain will improve compatibility.
$server->setBaseUri('/caldav/');
// Authentication plugin
$authPlugin = new Sabre_DAV_Auth_Plugin($authBackend, 'SabreDAV');
$server->addPlugin($authPlugin);
// CalDAV plugin
$caldavPlugin = new Sabre_CalDAV_Plugin();
$server->addPlugin($caldavPlugin);
// ACL plugin
$aclPlugin = new Sabre_DAVACL_Custom;
$server->addPlugin($aclPlugin);
// Support for html frontend
$browser = new Sabre_DAV_Browser_Plugin();
$server->addPlugin($browser);
$server->exec();
}
}
: 사용자에게 권한을 부여해야 두 번째 검사를 제외하고
<?php
class Sabre_DAVACL_Custom extends Sabre_DAVACL_Plugin {
public $allowAccessToNodesWithoutACL = false;
private function _getCurrentUserName() {
$authPlugin = $this->server->getPlugin('auth');
if (is_null($authPlugin)) return null;
return $authPlugin->getCurrentUser();
}
public function getACL($node) {
$user = $this->_getCurrentUserName();
$path = $node->getName();
if ($path == 'calendars' || $path == 'principals' || $path == 'root') {
return array(
array(
'privilege' => '{DAV:}read',
'principal' => 'principals/' . $user,
'protected' => true,
)
);
}
else if ($path == 'calendars/' . $user) {
return array(
array(
'privilege' => '{DAV:}read',
'principal' => 'principals/' . $user,
'protected' => true,
)
);
}
return array();
}
}
이 코드는 꽤 많은 작품 자신의 캘린더를 볼 수 있습니다. $ 노드의 전체 경로 이름을 가져올 수 없습니다.
이것은 구현하는 데 잘못된 방법 일 수 있지만 ACL을 구현하는 방법임을 확인하기 위해 문서를 찾을 수 없습니다.
http://code.google.com/p/sabredav/wiki/ACL#Setting_up ACL 지원에 따라 새로운이며 일하러 생성하는 사용자 정의 노드를 필요로한다. –