class_ACLPermissions.inc 2.10 KiB
<?php
/*
  This code is part of FusionDirectory (http://www.fusiondirectory.org/)
  Copyright (C) 2019-2020  FusionDirectory
  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2 of the License, or
  (at your option) any later version.
  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.
  You should have received a copy of the GNU General Public License
  along with this program; if not, write to the Free Software
  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
class ACLPermissions
  static protected $letters = [
    'r' => 'read',
    'w' => 'write',
    'c' => 'create',
    'd' => 'delete',
    'm' => 'move',
  protected $read;
  protected $write;
  protected $create;
  protected $delete;
  protected $move;
  /* Rights on self only */
  protected $self;
  public function __construct (string $rights = '')
    foreach (static::$letters as $letter => $var) {
      $this->$var = (strpos($rights, $letter) !== FALSE);
    $this->self = (strpos($rights, 's') !== FALSE);
  public function toString (bool $readOnly = FALSE): string
    $string = ($this->self ? 's' : '');
    if ($readOnly) {
      return $string.($this->read ? 'r' : '');
    } else {
      foreach (static::$letters as $letter => $var) {
        if ($this->$var) {
          $string .= $letter;
      return $string;
  public function __toString ()
    return $this->toString(FALSE);
  public function merge (ACLPermissions $merge)
    foreach (static::$letters as $var) {
717273747576777879808182838485
$this->$var = ($this->$var || $merge->$var); } } public function isSelf (): bool { return $this->self; } public function isFull (): bool { return ($this->read && $this->write && $this->create && $this->delete && $this->move); } }