1de02284cSSzymon Olewniczak<?php 2de02284cSSzymon Olewniczak 3de02284cSSzymon Olewniczaknamespace dokuwiki\plugin\bez\mdl; 4de02284cSSzymon Olewniczak 5de02284cSSzymon Olewniczakclass Acl { 6de02284cSSzymon Olewniczak 7*a0cd8c78SSzymon Olewniczak protected $acl = array(); 8de02284cSSzymon Olewniczak 9*a0cd8c78SSzymon Olewniczak protected $user_level; 10de02284cSSzymon Olewniczak 11*a0cd8c78SSzymon Olewniczak public function __construct($user_level, $columns) { 12*a0cd8c78SSzymon Olewniczak $this->user_level = $user_level; 13de02284cSSzymon Olewniczak 14*a0cd8c78SSzymon Olewniczak if ($this->user_level >= BEZ_AUTH_ADMIN) { 15*a0cd8c78SSzymon Olewniczak $this->acl = array_fill_keys($columns, BEZ_PERMISSION_DELETE); 16*a0cd8c78SSzymon Olewniczak } elseif ($this->user_level >= BEZ_AUTH_VIEWER) { 17*a0cd8c78SSzymon Olewniczak $this->acl = array_fill_keys($columns, BEZ_PERMISSION_VIEW); 18de02284cSSzymon Olewniczak } else { 19*a0cd8c78SSzymon Olewniczak $this->acl = array_fill_keys($columns, BEZ_PERMISSION_NONE); 20de02284cSSzymon Olewniczak } 21de02284cSSzymon Olewniczak } 22de02284cSSzymon Olewniczak 23*a0cd8c78SSzymon Olewniczak public function grant($columns, $perm) { 24*a0cd8c78SSzymon Olewniczak if (!is_array($columns)) $columns = array($columns); 25de02284cSSzymon Olewniczak 26*a0cd8c78SSzymon Olewniczak foreach($columns as $column) { 27*a0cd8c78SSzymon Olewniczak if (!array_key_exists($column, $this->acl)) { 28*a0cd8c78SSzymon Olewniczak throw new \Exception("column: $column not exists in table"); 29de02284cSSzymon Olewniczak } 30de02284cSSzymon Olewniczak 31*a0cd8c78SSzymon Olewniczak if ($this->acl[$column] < $perm) { 32*a0cd8c78SSzymon Olewniczak $this->acl[$column] = $perm; 3353df74e7SSzymon Olewniczak } 3453df74e7SSzymon Olewniczak } 3553df74e7SSzymon Olewniczak } 36de02284cSSzymon Olewniczak 37*a0cd8c78SSzymon Olewniczak public function revoke($columns, $level) { 38*a0cd8c78SSzymon Olewniczak if (!is_array($columns)) $columns = array($columns); 39de02284cSSzymon Olewniczak 40*a0cd8c78SSzymon Olewniczak foreach ($columns as $column) { 41*a0cd8c78SSzymon Olewniczak if ($this->user_level <= $level) { 42*a0cd8c78SSzymon Olewniczak $this->acl[$column] = BEZ_PERMISSION_NONE; 43de02284cSSzymon Olewniczak } 44de02284cSSzymon Olewniczak } 45de02284cSSzymon Olewniczak } 46de02284cSSzymon Olewniczak 47*a0cd8c78SSzymon Olewniczak public function acl_of($col) { 48*a0cd8c78SSzymon Olewniczak return $this->acl[$col]; 4953df74e7SSzymon Olewniczak } 5053df74e7SSzymon Olewniczak 51*a0cd8c78SSzymon Olewniczak public function get_list() { 52*a0cd8c78SSzymon Olewniczak return $this->acl; 5353df74e7SSzymon Olewniczak } 5453df74e7SSzymon Olewniczak 55*a0cd8c78SSzymon Olewniczak public function add_column($column, $perm=BEZ_PERMISSION_NONE) { 56*a0cd8c78SSzymon Olewniczak if (isset($this->acl[$column])) { 57*a0cd8c78SSzymon Olewniczak throw new \Exception('column already exists'); 58de02284cSSzymon Olewniczak } 59de02284cSSzymon Olewniczak 60*a0cd8c78SSzymon Olewniczak $this->acl[$column] = $perm; 61de02284cSSzymon Olewniczak } 62de02284cSSzymon Olewniczak} 63