1*a1a3b679SAndreas Boehler<?php 2*a1a3b679SAndreas Boehler 3*a1a3b679SAndreas Boehlernamespace Sabre\DAVACL\FS; 4*a1a3b679SAndreas Boehler 5*a1a3b679SAndreas Boehleruse Sabre\DAV\FSExt\File as BaseFile; 6*a1a3b679SAndreas Boehleruse Sabre\DAVACL\IACL; 7*a1a3b679SAndreas Boehleruse Sabre\DAV\Exception\Forbidden; 8*a1a3b679SAndreas Boehler 9*a1a3b679SAndreas Boehler/** 10*a1a3b679SAndreas Boehler * This is an ACL-enabled file node. 11*a1a3b679SAndreas Boehler * 12*a1a3b679SAndreas Boehler * @copyright Copyright (C) 2007-2015 fruux GmbH. (https://fruux.com/) 13*a1a3b679SAndreas Boehler * @author Evert Pot (http://evertpot.com/) 14*a1a3b679SAndreas Boehler * @license http://sabre.io/license/ Modified BSD License 15*a1a3b679SAndreas Boehler */ 16*a1a3b679SAndreas Boehlerclass File extends BaseFile implements IACL { 17*a1a3b679SAndreas Boehler 18*a1a3b679SAndreas Boehler /** 19*a1a3b679SAndreas Boehler * A list of ACL rules. 20*a1a3b679SAndreas Boehler * 21*a1a3b679SAndreas Boehler * @var array 22*a1a3b679SAndreas Boehler */ 23*a1a3b679SAndreas Boehler protected $acl; 24*a1a3b679SAndreas Boehler 25*a1a3b679SAndreas Boehler /** 26*a1a3b679SAndreas Boehler * Owner uri, or null for no owner. 27*a1a3b679SAndreas Boehler * 28*a1a3b679SAndreas Boehler * @var string|null 29*a1a3b679SAndreas Boehler */ 30*a1a3b679SAndreas Boehler protected $owner; 31*a1a3b679SAndreas Boehler 32*a1a3b679SAndreas Boehler /** 33*a1a3b679SAndreas Boehler * Constructor 34*a1a3b679SAndreas Boehler * 35*a1a3b679SAndreas Boehler * @param string $path on-disk path. 36*a1a3b679SAndreas Boehler * @param array $acl ACL rules. 37*a1a3b679SAndreas Boehler * @param string|null $owner principal owner string. 38*a1a3b679SAndreas Boehler */ 39*a1a3b679SAndreas Boehler function __construct($path, array $acl, $owner = null) { 40*a1a3b679SAndreas Boehler 41*a1a3b679SAndreas Boehler parent::__construct($path); 42*a1a3b679SAndreas Boehler $this->acl = $acl; 43*a1a3b679SAndreas Boehler $this->owner = $owner; 44*a1a3b679SAndreas Boehler 45*a1a3b679SAndreas Boehler } 46*a1a3b679SAndreas Boehler 47*a1a3b679SAndreas Boehler /** 48*a1a3b679SAndreas Boehler * Returns the owner principal 49*a1a3b679SAndreas Boehler * 50*a1a3b679SAndreas Boehler * This must be a url to a principal, or null if there's no owner 51*a1a3b679SAndreas Boehler * 52*a1a3b679SAndreas Boehler * @return string|null 53*a1a3b679SAndreas Boehler */ 54*a1a3b679SAndreas Boehler function getOwner() { 55*a1a3b679SAndreas Boehler 56*a1a3b679SAndreas Boehler return $this->owner; 57*a1a3b679SAndreas Boehler 58*a1a3b679SAndreas Boehler } 59*a1a3b679SAndreas Boehler 60*a1a3b679SAndreas Boehler /** 61*a1a3b679SAndreas Boehler * Returns a group principal 62*a1a3b679SAndreas Boehler * 63*a1a3b679SAndreas Boehler * This must be a url to a principal, or null if there's no owner 64*a1a3b679SAndreas Boehler * 65*a1a3b679SAndreas Boehler * @return string|null 66*a1a3b679SAndreas Boehler */ 67*a1a3b679SAndreas Boehler function getGroup() { 68*a1a3b679SAndreas Boehler 69*a1a3b679SAndreas Boehler return null; 70*a1a3b679SAndreas Boehler 71*a1a3b679SAndreas Boehler } 72*a1a3b679SAndreas Boehler 73*a1a3b679SAndreas Boehler /** 74*a1a3b679SAndreas Boehler * Returns a list of ACE's for this node. 75*a1a3b679SAndreas Boehler * 76*a1a3b679SAndreas Boehler * Each ACE has the following properties: 77*a1a3b679SAndreas Boehler * * 'privilege', a string such as {DAV:}read or {DAV:}write. These are 78*a1a3b679SAndreas Boehler * currently the only supported privileges 79*a1a3b679SAndreas Boehler * * 'principal', a url to the principal who owns the node 80*a1a3b679SAndreas Boehler * * 'protected' (optional), indicating that this ACE is not allowed to 81*a1a3b679SAndreas Boehler * be updated. 82*a1a3b679SAndreas Boehler * 83*a1a3b679SAndreas Boehler * @return array 84*a1a3b679SAndreas Boehler */ 85*a1a3b679SAndreas Boehler function getACL() { 86*a1a3b679SAndreas Boehler 87*a1a3b679SAndreas Boehler return $this->acl; 88*a1a3b679SAndreas Boehler 89*a1a3b679SAndreas Boehler } 90*a1a3b679SAndreas Boehler 91*a1a3b679SAndreas Boehler /** 92*a1a3b679SAndreas Boehler * Updates the ACL 93*a1a3b679SAndreas Boehler * 94*a1a3b679SAndreas Boehler * This method will receive a list of new ACE's as an array argument. 95*a1a3b679SAndreas Boehler * 96*a1a3b679SAndreas Boehler * @param array $acl 97*a1a3b679SAndreas Boehler * @return void 98*a1a3b679SAndreas Boehler */ 99*a1a3b679SAndreas Boehler function setACL(array $acl) { 100*a1a3b679SAndreas Boehler 101*a1a3b679SAndreas Boehler throw new Forbidden('Setting ACL is not allowed here'); 102*a1a3b679SAndreas Boehler 103*a1a3b679SAndreas Boehler } 104*a1a3b679SAndreas Boehler 105*a1a3b679SAndreas Boehler /** 106*a1a3b679SAndreas Boehler * Returns the list of supported privileges for this node. 107*a1a3b679SAndreas Boehler * 108*a1a3b679SAndreas Boehler * The returned data structure is a list of nested privileges. 109*a1a3b679SAndreas Boehler * See Sabre\DAVACL\Plugin::getDefaultSupportedPrivilegeSet for a simple 110*a1a3b679SAndreas Boehler * standard structure. 111*a1a3b679SAndreas Boehler * 112*a1a3b679SAndreas Boehler * If null is returned from this method, the default privilege set is used, 113*a1a3b679SAndreas Boehler * which is fine for most common usecases. 114*a1a3b679SAndreas Boehler * 115*a1a3b679SAndreas Boehler * @return array|null 116*a1a3b679SAndreas Boehler */ 117*a1a3b679SAndreas Boehler function getSupportedPrivilegeSet() { 118*a1a3b679SAndreas Boehler 119*a1a3b679SAndreas Boehler return null; 120*a1a3b679SAndreas Boehler 121*a1a3b679SAndreas Boehler } 122*a1a3b679SAndreas Boehler 123*a1a3b679SAndreas Boehler} 124