1de02284cSSzymon Olewniczak<?php 2de02284cSSzymon Olewniczak 3de02284cSSzymon Olewniczak//if(!defined('DOKU_INC')) die('meh.'); 4de02284cSSzymon Olewniczak// 5de02284cSSzymon Olewniczak//include_once DOKU_PLUGIN."bez/models/tokens.php"; 6de02284cSSzymon Olewniczak 7de02284cSSzymon Olewniczaknamespace dokuwiki\plugin\bez\mdl; 8de02284cSSzymon Olewniczak 9de02284cSSzymon Olewniczak//ACL level defines 10de02284cSSzymon Olewniczakuse dokuwiki\plugin\bez\meta\PermissionDeniedException; 11de02284cSSzymon Olewniczak 12de02284cSSzymon Olewniczakdefine('BEZ_AUTH_NONE', 0); 13de02284cSSzymon Olewniczakdefine('BEZ_AUTH_VIEWER', 2); 14de02284cSSzymon Olewniczakdefine('BEZ_AUTH_USER', 5); 15de02284cSSzymon Olewniczakdefine('BEZ_AUTH_LEADER', 10); 16de02284cSSzymon Olewniczakdefine('BEZ_AUTH_ADMIN', 20); 17de02284cSSzymon Olewniczak 18de02284cSSzymon Olewniczakdefine('BEZ_PERMISSION_UNKNOWN', -1); 19de02284cSSzymon Olewniczakdefine('BEZ_PERMISSION_NONE', 0); 20de02284cSSzymon Olewniczakdefine('BEZ_PERMISSION_VIEW', 1); 21de02284cSSzymon Olewniczakdefine('BEZ_PERMISSION_CHANGE', 2); 22*8a638198SSzymon Olewniczakdefine('BEZ_PERMISSION_DELETE', 3); 23de02284cSSzymon Olewniczak 24de02284cSSzymon Olewniczakclass Acl { 25de02284cSSzymon Olewniczak /** @var Model */ 26de02284cSSzymon Olewniczak private $model; 27de02284cSSzymon Olewniczak 28de02284cSSzymon Olewniczak private $level = BEZ_AUTH_NONE; 29de02284cSSzymon Olewniczak 30de02284cSSzymon Olewniczak// private $threads = array(); 31de02284cSSzymon Olewniczak// private $commcauses = array(); 32de02284cSSzymon Olewniczak// private $tasks = array(); 33de02284cSSzymon Olewniczak 34de02284cSSzymon Olewniczak private function update_level($level) { 35de02284cSSzymon Olewniczak if ($level > $this->level) { 36de02284cSSzymon Olewniczak $this->level = $level; 37de02284cSSzymon Olewniczak } 38de02284cSSzymon Olewniczak } 39de02284cSSzymon Olewniczak 40de02284cSSzymon Olewniczak public function get_level() { 41de02284cSSzymon Olewniczak return $this->level; 42de02284cSSzymon Olewniczak } 43de02284cSSzymon Olewniczak 44de02284cSSzymon Olewniczak public function __construct(Model $model) { 45de02284cSSzymon Olewniczak $this->model = $model; 46de02284cSSzymon Olewniczak 47de02284cSSzymon Olewniczak $userd = $this->model->dw_auth->getUserData($this->model->user_nick); 48de02284cSSzymon Olewniczak if ($userd !== false && is_array($userd['grps'])) { 49de02284cSSzymon Olewniczak $grps = $userd['grps']; 50de02284cSSzymon Olewniczak if (in_array('admin', $grps ) || in_array('bez_admin', $grps )) { 51de02284cSSzymon Olewniczak $this->update_level(BEZ_AUTH_ADMIN); 52de02284cSSzymon Olewniczak } elseif (in_array('bez_leader', $grps )) { 53de02284cSSzymon Olewniczak $this->update_level(BEZ_AUTH_LEADER); 54de02284cSSzymon Olewniczak } else { 55de02284cSSzymon Olewniczak $this->update_level(BEZ_AUTH_USER); 56de02284cSSzymon Olewniczak } 57de02284cSSzymon Olewniczak } elseif (isset($_GET['t'])) { 58de02284cSSzymon Olewniczak// $page_id = $this->model->action->page_id(); 59de02284cSSzymon Olewniczak// $toko = new Tokens(); 60de02284cSSzymon Olewniczak// 61de02284cSSzymon Olewniczak// if ($toko->check(trim($_GET['t']), $page_id)) { 62de02284cSSzymon Olewniczak// $this->update_level(BEZ_AUTH_VIEWER); 63de02284cSSzymon Olewniczak// } 64de02284cSSzymon Olewniczak } 65de02284cSSzymon Olewniczak } 66de02284cSSzymon Olewniczak 67de02284cSSzymon Olewniczak private function static_thread() { 68de02284cSSzymon Olewniczak $acl = array_fill_keys(Thread::get_columns(), BEZ_PERMISSION_NONE); 69de02284cSSzymon Olewniczak 70de02284cSSzymon Olewniczak //virtual columns 71de02284cSSzymon Olewniczak $acl['participants'] = BEZ_PERMISSION_NONE; 72de02284cSSzymon Olewniczak $acl['labels'] = BEZ_PERMISSION_NONE; 73de02284cSSzymon Olewniczak 74de02284cSSzymon Olewniczak //BEZ_AUTH_VIEWER is also token viewer 75de02284cSSzymon Olewniczak if ($this->level >= BEZ_AUTH_VIEWER) { 76de02284cSSzymon Olewniczak //user can display everythig 77de02284cSSzymon Olewniczak $acl = array_map(function($value) { 78de02284cSSzymon Olewniczak return BEZ_PERMISSION_VIEW; 79de02284cSSzymon Olewniczak }, $acl); 80de02284cSSzymon Olewniczak } 81de02284cSSzymon Olewniczak 82de02284cSSzymon Olewniczak if ($this->level >= BEZ_AUTH_ADMIN) { 83de02284cSSzymon Olewniczak //user can edit everythig 84de02284cSSzymon Olewniczak $acl = array_map(function($value) { 85*8a638198SSzymon Olewniczak return BEZ_PERMISSION_DELETE; 86de02284cSSzymon Olewniczak }, $acl); 87de02284cSSzymon Olewniczak 88de02284cSSzymon Olewniczak return $acl; 89de02284cSSzymon Olewniczak } 90de02284cSSzymon Olewniczak } 91de02284cSSzymon Olewniczak 92de02284cSSzymon Olewniczak 93de02284cSSzymon Olewniczak private function check_thread(Thread $thread) { 94de02284cSSzymon Olewniczak $acl = $this->static_thread(); 95de02284cSSzymon Olewniczak 96de02284cSSzymon Olewniczak //we create new issue 97de02284cSSzymon Olewniczak if ($thread->id === NULL) { 98de02284cSSzymon Olewniczak if ($this->level >= BEZ_AUTH_USER) { 99de02284cSSzymon Olewniczak $acl['title'] = BEZ_PERMISSION_CHANGE; 100de02284cSSzymon Olewniczak $acl['content'] = BEZ_PERMISSION_CHANGE; 101de02284cSSzymon Olewniczak //$acl['type'] = BEZ_PERMISSION_CHANGE; 102de02284cSSzymon Olewniczak } 103de02284cSSzymon Olewniczak 104de02284cSSzymon Olewniczak if ($this->level >= BEZ_AUTH_LEADER) { 105de02284cSSzymon Olewniczak $acl['coordinator'] = BEZ_PERMISSION_CHANGE; 106de02284cSSzymon Olewniczak } 107de02284cSSzymon Olewniczak 108de02284cSSzymon Olewniczak return $acl; 109de02284cSSzymon Olewniczak } 110de02284cSSzymon Olewniczak 111de02284cSSzymon Olewniczak if ($thread->state === 'proposal' && 112de02284cSSzymon Olewniczak $thread->original_poster === $this->model->user_nick) { 113de02284cSSzymon Olewniczak $acl['title'] = BEZ_PERMISSION_CHANGE; 114de02284cSSzymon Olewniczak $acl['content'] = BEZ_PERMISSION_CHANGE; 115de02284cSSzymon Olewniczak //$acl['type'] = BEZ_PERMISSION_CHANGE; 116de02284cSSzymon Olewniczak } 117de02284cSSzymon Olewniczak 118de02284cSSzymon Olewniczak if ($thread->coordinator === $this->model->user_nick) { 119de02284cSSzymon Olewniczak $acl['title'] = BEZ_PERMISSION_CHANGE; 120de02284cSSzymon Olewniczak $acl['content'] = BEZ_PERMISSION_CHANGE; 121de02284cSSzymon Olewniczak //$acl['type'] = BEZ_PERMISSION_CHANGE; 122de02284cSSzymon Olewniczak 123de02284cSSzymon Olewniczak //coordinator can change coordinator 124de02284cSSzymon Olewniczak $acl['coordinator'] = BEZ_PERMISSION_CHANGE; 125de02284cSSzymon Olewniczak 126de02284cSSzymon Olewniczak $acl['state'] = BEZ_PERMISSION_CHANGE; 127de02284cSSzymon Olewniczak //$acl['opinion'] = BEZ_PERMISSION_CHANGE; 128de02284cSSzymon Olewniczak } 129de02284cSSzymon Olewniczak 130de02284cSSzymon Olewniczak return $acl; 131de02284cSSzymon Olewniczak } 132de02284cSSzymon Olewniczak 133*8a638198SSzymon Olewniczak private function static_task() { 134*8a638198SSzymon Olewniczak $acl = array_fill_keys(Task::get_columns(), BEZ_PERMISSION_NONE); 135de02284cSSzymon Olewniczak 136*8a638198SSzymon Olewniczak //BEZ_AUTH_VIEWER is also token viewer 137de02284cSSzymon Olewniczak if ($this->level >= BEZ_AUTH_VIEWER) { 138de02284cSSzymon Olewniczak //user can display everythig 139de02284cSSzymon Olewniczak $acl = array_map(function($value) { 140de02284cSSzymon Olewniczak return BEZ_PERMISSION_VIEW; 141de02284cSSzymon Olewniczak }, $acl); 142de02284cSSzymon Olewniczak } 143de02284cSSzymon Olewniczak 144de02284cSSzymon Olewniczak if ($this->level >= BEZ_AUTH_ADMIN) { 145*8a638198SSzymon Olewniczak //user can edit everythig 146de02284cSSzymon Olewniczak $acl = array_map(function($value) { 147*8a638198SSzymon Olewniczak return BEZ_PERMISSION_DELETE; 148de02284cSSzymon Olewniczak }, $acl); 149de02284cSSzymon Olewniczak 150de02284cSSzymon Olewniczak return $acl; 151de02284cSSzymon Olewniczak } 152*8a638198SSzymon Olewniczak } 153*8a638198SSzymon Olewniczak 154*8a638198SSzymon Olewniczak //if user can chante id => he can delete record 155*8a638198SSzymon Olewniczak private function check_task($task) { 156*8a638198SSzymon Olewniczak $acl = $this->static_task(); 157de02284cSSzymon Olewniczak 158de02284cSSzymon Olewniczak //we create new task 159de02284cSSzymon Olewniczak if ($task->id === NULL) { 160de02284cSSzymon Olewniczak 161*8a638198SSzymon Olewniczak if ($task->thread != null && $task->thread->coordinator == $this->model->user_nick || 162*8a638198SSzymon Olewniczak ($task->thread_id == '' && $this->level >= BEZ_AUTH_LEADER)) { 163*8a638198SSzymon Olewniczak $acl['content'] = BEZ_PERMISSION_CHANGE; 164*8a638198SSzymon Olewniczak $acl['task_program_id'] = BEZ_PERMISSION_CHANGE; 165*8a638198SSzymon Olewniczak $acl['assignee'] = BEZ_PERMISSION_CHANGE; 166de02284cSSzymon Olewniczak $acl['cost'] = BEZ_PERMISSION_CHANGE; 167de02284cSSzymon Olewniczak $acl['plan_date'] = BEZ_PERMISSION_CHANGE; 168de02284cSSzymon Olewniczak $acl['all_day_event'] = BEZ_PERMISSION_CHANGE; 169de02284cSSzymon Olewniczak $acl['start_time'] = BEZ_PERMISSION_CHANGE; 170de02284cSSzymon Olewniczak $acl['finish_time'] = BEZ_PERMISSION_CHANGE; 171de02284cSSzymon Olewniczak } 172de02284cSSzymon Olewniczak 173de02284cSSzymon Olewniczak //przypisujemy zadanie programowe samemu sobie 174*8a638198SSzymon Olewniczak //no assignee 175*8a638198SSzymon Olewniczak if ($task->thread_id == '') { 176*8a638198SSzymon Olewniczak $acl['content'] = BEZ_PERMISSION_CHANGE; 177*8a638198SSzymon Olewniczak $acl['task_program_id'] = BEZ_PERMISSION_CHANGE; 178de02284cSSzymon Olewniczak $acl['cost'] = BEZ_PERMISSION_CHANGE; 179de02284cSSzymon Olewniczak $acl['plan_date'] = BEZ_PERMISSION_CHANGE; 180de02284cSSzymon Olewniczak $acl['all_day_event'] = BEZ_PERMISSION_CHANGE; 181de02284cSSzymon Olewniczak $acl['start_time'] = BEZ_PERMISSION_CHANGE; 182de02284cSSzymon Olewniczak $acl['finish_time'] = BEZ_PERMISSION_CHANGE; 183de02284cSSzymon Olewniczak } 184de02284cSSzymon Olewniczak 185de02284cSSzymon Olewniczak return $acl; 186de02284cSSzymon Olewniczak } 187de02284cSSzymon Olewniczak 188de02284cSSzymon Olewniczak //user can change state 189*8a638198SSzymon Olewniczak// if ($task->assignee == $this->model->user_nick) { 190*8a638198SSzymon Olewniczak//// $acl['reason'] = BEZ_PERMISSION_CHANGE; 191*8a638198SSzymon Olewniczak// $acl['state'] = BEZ_PERMISSION_CHANGE; 192*8a638198SSzymon Olewniczak// } 193de02284cSSzymon Olewniczak 194de02284cSSzymon Olewniczak //reporters can add subscribents to programme task 195*8a638198SSzymon Olewniczak// if ($task->original_poster === $this->model->user_nick) { 196*8a638198SSzymon Olewniczak// $acl['subscribents'] = BEZ_PERMISSION_CHANGE; 197*8a638198SSzymon Olewniczak// } 198de02284cSSzymon Olewniczak 199*8a638198SSzymon Olewniczak if ($task->thread != null && $task->thread->coordinator == $this->model->user_nick || 200*8a638198SSzymon Olewniczak ($task->thread_id == '' && $this->level >= BEZ_AUTH_LEADER)) { 201de02284cSSzymon Olewniczak 202*8a638198SSzymon Olewniczak// $acl['reason'] = BEZ_PERMISSION_CHANGE; 203*8a638198SSzymon Olewniczak //$acl['state'] = BEZ_PERMISSION_CHANGE; 204de02284cSSzymon Olewniczak 205de02284cSSzymon Olewniczak //we can chante cause 206*8a638198SSzymon Olewniczak $acl['thread_comment_id'] = BEZ_PERMISSION_CHANGE; 207de02284cSSzymon Olewniczak 208*8a638198SSzymon Olewniczak $acl['content'] = BEZ_PERMISSION_CHANGE; 209*8a638198SSzymon Olewniczak $acl['task_program_id'] = BEZ_PERMISSION_CHANGE; 210*8a638198SSzymon Olewniczak $acl['assignee'] = BEZ_PERMISSION_CHANGE; 211de02284cSSzymon Olewniczak $acl['cost'] = BEZ_PERMISSION_CHANGE; 212*8a638198SSzymon Olewniczak //$acl['reason'] = BEZ_PERMISSION_CHANGE; 213de02284cSSzymon Olewniczak $acl['plan_date'] = BEZ_PERMISSION_CHANGE; 214de02284cSSzymon Olewniczak $acl['all_day_event'] = BEZ_PERMISSION_CHANGE; 215de02284cSSzymon Olewniczak $acl['start_time'] = BEZ_PERMISSION_CHANGE; 216de02284cSSzymon Olewniczak $acl['finish_time'] = BEZ_PERMISSION_CHANGE; 217de02284cSSzymon Olewniczak 218de02284cSSzymon Olewniczak 219de02284cSSzymon Olewniczak //leaders can add subscribents to programme tasks 220*8a638198SSzymon Olewniczak //$acl['subscribents'] = BEZ_PERMISSION_CHANGE; 221de02284cSSzymon Olewniczak } 222de02284cSSzymon Olewniczak 223*8a638198SSzymon Olewniczak if ($task->thread_id == '' && 224*8a638198SSzymon Olewniczak $task->original_poster == $this->model->user_nick && 225*8a638198SSzymon Olewniczak $task->assignee == $this->model->user_nick) { 226*8a638198SSzymon Olewniczak //$acl['reason'] = BEZ_PERMISSION_CHANGE; 227*8a638198SSzymon Olewniczak //$acl['state'] = BEZ_PERMISSION_CHANGE; 228de02284cSSzymon Olewniczak 229*8a638198SSzymon Olewniczak $acl['content'] = BEZ_PERMISSION_CHANGE; 230*8a638198SSzymon Olewniczak $acl['task_program_id'] = BEZ_PERMISSION_CHANGE; 231de02284cSSzymon Olewniczak //no executor 232de02284cSSzymon Olewniczak $acl['cost'] = BEZ_PERMISSION_CHANGE; 233*8a638198SSzymon Olewniczak //$acl['reason'] = BEZ_PERMISSION_CHANGE; 234de02284cSSzymon Olewniczak $acl['plan_date'] = BEZ_PERMISSION_CHANGE; 235de02284cSSzymon Olewniczak $acl['all_day_event'] = BEZ_PERMISSION_CHANGE; 236de02284cSSzymon Olewniczak $acl['start_time'] = BEZ_PERMISSION_CHANGE; 237de02284cSSzymon Olewniczak $acl['finish_time'] = BEZ_PERMISSION_CHANGE; 238de02284cSSzymon Olewniczak } 239de02284cSSzymon Olewniczak 240de02284cSSzymon Olewniczak 241de02284cSSzymon Olewniczak return $acl; 242de02284cSSzymon Olewniczak 243de02284cSSzymon Olewniczak } 2447fbf4c39SSzymon Olewniczak 2457fbf4c39SSzymon Olewniczak private function static_thread_comment() { 2467fbf4c39SSzymon Olewniczak $acl = array_fill_keys(Thread_comment::get_columns(), BEZ_PERMISSION_NONE); 2477fbf4c39SSzymon Olewniczak 2487fbf4c39SSzymon Olewniczak //virtual columns 2497fbf4c39SSzymon Olewniczak 2507fbf4c39SSzymon Olewniczak //BEZ_AUTH_VIEWER is also token viewer 2517fbf4c39SSzymon Olewniczak if ($this->level >= BEZ_AUTH_VIEWER) { 2527fbf4c39SSzymon Olewniczak //user can display everythig 2537fbf4c39SSzymon Olewniczak $acl = array_map(function($value) { 2547fbf4c39SSzymon Olewniczak return BEZ_PERMISSION_VIEW; 2557fbf4c39SSzymon Olewniczak }, $acl); 2567fbf4c39SSzymon Olewniczak } 2577fbf4c39SSzymon Olewniczak 2587fbf4c39SSzymon Olewniczak if ($this->level >= BEZ_AUTH_ADMIN) { 2597fbf4c39SSzymon Olewniczak //user can edit everythig 2607fbf4c39SSzymon Olewniczak $acl = array_map(function($value) { 261*8a638198SSzymon Olewniczak return BEZ_PERMISSION_DELETE; 2627fbf4c39SSzymon Olewniczak }, $acl); 2637fbf4c39SSzymon Olewniczak 2647fbf4c39SSzymon Olewniczak return $acl; 2657fbf4c39SSzymon Olewniczak } 2667fbf4c39SSzymon Olewniczak } 267de02284cSSzymon Olewniczak 268*8a638198SSzymon Olewniczak private function check_thread_comment(Thread_comment $thread_comment) { 269*8a638198SSzymon Olewniczak $acl = $this->static_thread_comment(); 270de02284cSSzymon Olewniczak 271de02284cSSzymon Olewniczak //we create new commcause 272*8a638198SSzymon Olewniczak if ($thread_comment->id === NULL) { 273de02284cSSzymon Olewniczak if ($this->level >= BEZ_USER) { 274de02284cSSzymon Olewniczak $acl['content'] = BEZ_PERMISSION_CHANGE; 275de02284cSSzymon Olewniczak } 276de02284cSSzymon Olewniczak 277*8a638198SSzymon Olewniczak if ($thread_comment->coordinator === $this->model->user_nick) { 278de02284cSSzymon Olewniczak $acl['type'] = BEZ_PERMISSION_CHANGE; 279de02284cSSzymon Olewniczak $acl['content'] = BEZ_PERMISSION_CHANGE; 280de02284cSSzymon Olewniczak } 281de02284cSSzymon Olewniczak 282de02284cSSzymon Olewniczak return $acl; 283de02284cSSzymon Olewniczak } 284de02284cSSzymon Olewniczak 285de02284cSSzymon Olewniczak 286*8a638198SSzymon Olewniczak if ($thread_comment->coordinator === $this->model->user_nick) { 287de02284cSSzymon Olewniczak $acl['type'] = BEZ_PERMISSION_CHANGE; 288de02284cSSzymon Olewniczak $acl['content'] = BEZ_PERMISSION_CHANGE; 289de02284cSSzymon Olewniczak 290de02284cSSzymon Olewniczak //we can only delete records when there is no tasks subscribed to issue 291*8a638198SSzymon Olewniczak if ($thread_comment->task_count === 0) { 292de02284cSSzymon Olewniczak $acl['id'] = BEZ_PERMISSION_CHANGE; 293de02284cSSzymon Olewniczak } 294de02284cSSzymon Olewniczak 295de02284cSSzymon Olewniczak } 296de02284cSSzymon Olewniczak 297de02284cSSzymon Olewniczak //jeżeli ktoś zmieni typ z komentarza na przyczynę, tracimy możliwość edycji 298*8a638198SSzymon Olewniczak if ($thread_comment->author === $this->model->user_nick && 299*8a638198SSzymon Olewniczak $thread_comment->type == '0') { 300de02284cSSzymon Olewniczak $acl['content'] = BEZ_PERMISSION_CHANGE; 301de02284cSSzymon Olewniczak 302de02284cSSzymon Olewniczak //we can only delete records when there is no tasks subscribed to issue 303*8a638198SSzymon Olewniczak if ($thread_comment->task_count === 0) { 304de02284cSSzymon Olewniczak $acl['id'] = BEZ_PERMISSION_CHANGE; 305de02284cSSzymon Olewniczak } 306de02284cSSzymon Olewniczak } 307de02284cSSzymon Olewniczak 308de02284cSSzymon Olewniczak return $acl; 309de02284cSSzymon Olewniczak 310de02284cSSzymon Olewniczak } 311de02284cSSzymon Olewniczak 312de02284cSSzymon Olewniczak private function static_label() { 313de02284cSSzymon Olewniczak $acl = array_fill_keys(Label::get_columns(), BEZ_PERMISSION_NONE); 314de02284cSSzymon Olewniczak 315de02284cSSzymon Olewniczak if ($this->level >= BEZ_AUTH_USER) { 316de02284cSSzymon Olewniczak //user can display everythig 317de02284cSSzymon Olewniczak $acl = array_map(function($value) { 318de02284cSSzymon Olewniczak return BEZ_PERMISSION_VIEW; 319de02284cSSzymon Olewniczak }, $acl); 320de02284cSSzymon Olewniczak } 321de02284cSSzymon Olewniczak 322de02284cSSzymon Olewniczak if ($this->level >= BEZ_AUTH_ADMIN) { 323de02284cSSzymon Olewniczak //admin can edit everythig 324de02284cSSzymon Olewniczak $acl = array_map(function($value) { 325*8a638198SSzymon Olewniczak return BEZ_PERMISSION_DELETE; 326de02284cSSzymon Olewniczak }, $acl); 327de02284cSSzymon Olewniczak } 328de02284cSSzymon Olewniczak 329de02284cSSzymon Olewniczak return $acl; 330de02284cSSzymon Olewniczak } 331de02284cSSzymon Olewniczak 332de02284cSSzymon Olewniczak private function check_label(Label $label) { 333de02284cSSzymon Olewniczak return $this->static_label(); 334de02284cSSzymon Olewniczak } 335de02284cSSzymon Olewniczak 336de02284cSSzymon Olewniczak private function check_tasktype($tasktype) { 337de02284cSSzymon Olewniczak $acl = array( 338de02284cSSzymon Olewniczak 'id' => BEZ_PERMISSION_NONE, 339de02284cSSzymon Olewniczak 'pl' => BEZ_PERMISSION_NONE, 340de02284cSSzymon Olewniczak 'en' => BEZ_PERMISSION_NONE 341de02284cSSzymon Olewniczak ); 342de02284cSSzymon Olewniczak 343de02284cSSzymon Olewniczak if ($this->level >= BEZ_AUTH_USER) { 344de02284cSSzymon Olewniczak //user can display everythig 345de02284cSSzymon Olewniczak $acl = array_map(function($value) { 346de02284cSSzymon Olewniczak return BEZ_PERMISSION_VIEW; 347de02284cSSzymon Olewniczak }, $acl); 348de02284cSSzymon Olewniczak } 349de02284cSSzymon Olewniczak 350de02284cSSzymon Olewniczak if ($this->level >= BEZ_AUTH_ADMIN) { 351de02284cSSzymon Olewniczak //admin can edit everythig 352de02284cSSzymon Olewniczak $acl = array_map(function($value) { 353de02284cSSzymon Olewniczak return BEZ_PERMISSION_CHANGE; 354de02284cSSzymon Olewniczak }, $acl); 355de02284cSSzymon Olewniczak } 356de02284cSSzymon Olewniczak 357de02284cSSzymon Olewniczak return $acl; 358de02284cSSzymon Olewniczak } 359de02284cSSzymon Olewniczak 360de02284cSSzymon Olewniczak /*returns array */ 361de02284cSSzymon Olewniczak public function check(Entity $obj) { 362de02284cSSzymon Olewniczak $method = 'check_'.$obj->get_table_name(); 363de02284cSSzymon Olewniczak if (!method_exists($this, $method)) { 364de02284cSSzymon Olewniczak throw new \Exception('no acl rules set for table: '.$obj->get_table_name()); 365de02284cSSzymon Olewniczak } 366de02284cSSzymon Olewniczak return $this->$method($obj); 367de02284cSSzymon Olewniczak } 368de02284cSSzymon Olewniczak 369de02284cSSzymon Olewniczak public function check_field(Entity $obj, $field) { 370de02284cSSzymon Olewniczak $acl = $this->check($obj); 371de02284cSSzymon Olewniczak 372de02284cSSzymon Olewniczak if (isset($acl[$field])) { 373de02284cSSzymon Olewniczak return $acl[$field]; 374de02284cSSzymon Olewniczak } 375de02284cSSzymon Olewniczak return BEZ_PERMISSION_UNKNOWN; 376de02284cSSzymon Olewniczak } 377de02284cSSzymon Olewniczak 378de02284cSSzymon Olewniczak public function check_static($table) { 379de02284cSSzymon Olewniczak $method = 'static_'.$table; 380de02284cSSzymon Olewniczak if (!method_exists($this, $method)) { 381de02284cSSzymon Olewniczak throw new \Exception('no acl rules set for table: '.$table); 382de02284cSSzymon Olewniczak } 383de02284cSSzymon Olewniczak return $this->$method($table); 384de02284cSSzymon Olewniczak } 385de02284cSSzymon Olewniczak 386de02284cSSzymon Olewniczak public function check_static_field($table, $field) { 387de02284cSSzymon Olewniczak $acl = $this->check_static($table); 388de02284cSSzymon Olewniczak return $acl[$field]; 389de02284cSSzymon Olewniczak } 390de02284cSSzymon Olewniczak 391de02284cSSzymon Olewniczak 392*8a638198SSzymon Olewniczak public function can(Entity $obj, $field, $what=BEZ_PERMISSION_CHANGE) { 393*8a638198SSzymon Olewniczak if ($this->check_field($obj, $field) < $what) { 394de02284cSSzymon Olewniczak $table = $obj->get_table_name(); 395de02284cSSzymon Olewniczak $id = $obj->id; 396de02284cSSzymon Olewniczak throw new PermissionDeniedException('user cannot change field "'.$field.'" in table "'.$table.', rowid: "'.$id.'"'); 397de02284cSSzymon Olewniczak } 398de02284cSSzymon Olewniczak } 399de02284cSSzymon Olewniczak} 400