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); 22de02284cSSzymon Olewniczak 23de02284cSSzymon Olewniczakclass Acl { 24de02284cSSzymon Olewniczak /** @var Model */ 25de02284cSSzymon Olewniczak private $model; 26de02284cSSzymon Olewniczak 27de02284cSSzymon Olewniczak private $level = BEZ_AUTH_NONE; 28de02284cSSzymon Olewniczak 29de02284cSSzymon Olewniczak// private $threads = array(); 30de02284cSSzymon Olewniczak// private $commcauses = array(); 31de02284cSSzymon Olewniczak// private $tasks = array(); 32de02284cSSzymon Olewniczak 33de02284cSSzymon Olewniczak private function update_level($level) { 34de02284cSSzymon Olewniczak if ($level > $this->level) { 35de02284cSSzymon Olewniczak $this->level = $level; 36de02284cSSzymon Olewniczak } 37de02284cSSzymon Olewniczak } 38de02284cSSzymon Olewniczak 39de02284cSSzymon Olewniczak public function get_level() { 40de02284cSSzymon Olewniczak return $this->level; 41de02284cSSzymon Olewniczak } 42de02284cSSzymon Olewniczak 43de02284cSSzymon Olewniczak public function __construct(Model $model) { 44de02284cSSzymon Olewniczak $this->model = $model; 45de02284cSSzymon Olewniczak 46de02284cSSzymon Olewniczak $userd = $this->model->dw_auth->getUserData($this->model->user_nick); 47de02284cSSzymon Olewniczak if ($userd !== false && is_array($userd['grps'])) { 48de02284cSSzymon Olewniczak $grps = $userd['grps']; 49de02284cSSzymon Olewniczak if (in_array('admin', $grps ) || in_array('bez_admin', $grps )) { 50de02284cSSzymon Olewniczak $this->update_level(BEZ_AUTH_ADMIN); 51de02284cSSzymon Olewniczak } elseif (in_array('bez_leader', $grps )) { 52de02284cSSzymon Olewniczak $this->update_level(BEZ_AUTH_LEADER); 53de02284cSSzymon Olewniczak } else { 54de02284cSSzymon Olewniczak $this->update_level(BEZ_AUTH_USER); 55de02284cSSzymon Olewniczak } 56de02284cSSzymon Olewniczak } elseif (isset($_GET['t'])) { 57de02284cSSzymon Olewniczak// $page_id = $this->model->action->page_id(); 58de02284cSSzymon Olewniczak// $toko = new Tokens(); 59de02284cSSzymon Olewniczak// 60de02284cSSzymon Olewniczak// if ($toko->check(trim($_GET['t']), $page_id)) { 61de02284cSSzymon Olewniczak// $this->update_level(BEZ_AUTH_VIEWER); 62de02284cSSzymon Olewniczak// } 63de02284cSSzymon Olewniczak } 64de02284cSSzymon Olewniczak } 65de02284cSSzymon Olewniczak 66de02284cSSzymon Olewniczak private function static_thread() { 67de02284cSSzymon Olewniczak $acl = array_fill_keys(Thread::get_columns(), BEZ_PERMISSION_NONE); 68de02284cSSzymon Olewniczak 69de02284cSSzymon Olewniczak //virtual columns 70de02284cSSzymon Olewniczak $acl['participants'] = BEZ_PERMISSION_NONE; 71de02284cSSzymon Olewniczak $acl['labels'] = BEZ_PERMISSION_NONE; 72de02284cSSzymon Olewniczak 73de02284cSSzymon Olewniczak //BEZ_AUTH_VIEWER is also token viewer 74de02284cSSzymon Olewniczak if ($this->level >= BEZ_AUTH_VIEWER) { 75de02284cSSzymon Olewniczak //user can display everythig 76de02284cSSzymon Olewniczak $acl = array_map(function($value) { 77de02284cSSzymon Olewniczak return BEZ_PERMISSION_VIEW; 78de02284cSSzymon Olewniczak }, $acl); 79de02284cSSzymon Olewniczak } 80de02284cSSzymon Olewniczak 81de02284cSSzymon Olewniczak if ($this->level >= BEZ_AUTH_ADMIN) { 82de02284cSSzymon Olewniczak //user can edit everythig 83de02284cSSzymon Olewniczak $acl = array_map(function($value) { 84de02284cSSzymon Olewniczak return BEZ_PERMISSION_CHANGE; 85de02284cSSzymon Olewniczak }, $acl); 86de02284cSSzymon Olewniczak 87de02284cSSzymon Olewniczak return $acl; 88de02284cSSzymon Olewniczak } 89de02284cSSzymon Olewniczak } 90de02284cSSzymon Olewniczak 91de02284cSSzymon Olewniczak 92de02284cSSzymon Olewniczak private function check_thread(Thread $thread) { 93de02284cSSzymon Olewniczak// $acl = array( 94de02284cSSzymon Olewniczak// 'id' => BEZ_PERMISSION_NONE, 95de02284cSSzymon Olewniczak// 'title' => BEZ_PERMISSION_NONE, 96de02284cSSzymon Olewniczak// 'description' => BEZ_PERMISSION_NONE, 97de02284cSSzymon Olewniczak// 'state' => BEZ_PERMISSION_NONE, 98de02284cSSzymon Olewniczak// 'opinion' => BEZ_PERMISSION_NONE, 99de02284cSSzymon Olewniczak// 'type' => BEZ_PERMISSION_NONE, 100de02284cSSzymon Olewniczak// 'coordinator' => BEZ_PERMISSION_NONE, 101de02284cSSzymon Olewniczak// 'reporter' => BEZ_PERMISSION_NONE, 102de02284cSSzymon Olewniczak// 'date' => BEZ_PERMISSION_NONE, 103de02284cSSzymon Olewniczak// 'last_mod' => BEZ_PERMISSION_NONE, 104de02284cSSzymon Olewniczak// 'last_activity' => BEZ_PERMISSION_NONE, 105de02284cSSzymon Olewniczak// 'participants' => BEZ_PERMISSION_NONE, 106de02284cSSzymon Olewniczak// 'subscribents' => BEZ_PERMISSION_NONE, 107de02284cSSzymon Olewniczak// 'description_cache' => BEZ_PERMISSION_NONE, 108de02284cSSzymon Olewniczak// 'opinion_cache' => BEZ_PERMISSION_NONE 109de02284cSSzymon Olewniczak// ); 110de02284cSSzymon Olewniczak 111de02284cSSzymon Olewniczak $acl = $this->static_thread(); 112de02284cSSzymon Olewniczak 113de02284cSSzymon Olewniczak //we create new issue 114de02284cSSzymon Olewniczak if ($thread->id === NULL) { 115de02284cSSzymon Olewniczak if ($this->level >= BEZ_AUTH_USER) { 116de02284cSSzymon Olewniczak $acl['title'] = BEZ_PERMISSION_CHANGE; 117de02284cSSzymon Olewniczak $acl['content'] = BEZ_PERMISSION_CHANGE; 118de02284cSSzymon Olewniczak //$acl['type'] = BEZ_PERMISSION_CHANGE; 119de02284cSSzymon Olewniczak } 120de02284cSSzymon Olewniczak 121de02284cSSzymon Olewniczak if ($this->level >= BEZ_AUTH_LEADER) { 122de02284cSSzymon Olewniczak $acl['coordinator'] = BEZ_PERMISSION_CHANGE; 123de02284cSSzymon Olewniczak } 124de02284cSSzymon Olewniczak 125de02284cSSzymon Olewniczak return $acl; 126de02284cSSzymon Olewniczak } 127de02284cSSzymon Olewniczak 128de02284cSSzymon Olewniczak if ($thread->state === 'proposal' && 129de02284cSSzymon Olewniczak $thread->original_poster === $this->model->user_nick) { 130de02284cSSzymon Olewniczak $acl['title'] = BEZ_PERMISSION_CHANGE; 131de02284cSSzymon Olewniczak $acl['content'] = BEZ_PERMISSION_CHANGE; 132de02284cSSzymon Olewniczak //$acl['type'] = BEZ_PERMISSION_CHANGE; 133de02284cSSzymon Olewniczak } 134de02284cSSzymon Olewniczak 135de02284cSSzymon Olewniczak if ($thread->coordinator === $this->model->user_nick) { 136de02284cSSzymon Olewniczak $acl['title'] = BEZ_PERMISSION_CHANGE; 137de02284cSSzymon Olewniczak $acl['content'] = BEZ_PERMISSION_CHANGE; 138de02284cSSzymon Olewniczak //$acl['type'] = BEZ_PERMISSION_CHANGE; 139de02284cSSzymon Olewniczak 140de02284cSSzymon Olewniczak //coordinator can change coordinator 141de02284cSSzymon Olewniczak $acl['coordinator'] = BEZ_PERMISSION_CHANGE; 142de02284cSSzymon Olewniczak 143de02284cSSzymon Olewniczak $acl['state'] = BEZ_PERMISSION_CHANGE; 144de02284cSSzymon Olewniczak //$acl['opinion'] = BEZ_PERMISSION_CHANGE; 145de02284cSSzymon Olewniczak } 146de02284cSSzymon Olewniczak 147de02284cSSzymon Olewniczak return $acl; 148de02284cSSzymon Olewniczak } 149de02284cSSzymon Olewniczak 150de02284cSSzymon Olewniczak //if user can chante id => he can delete record 151de02284cSSzymon Olewniczak private function check_task($task) { 152de02284cSSzymon Olewniczak $acl = array( 153de02284cSSzymon Olewniczak 'id' => BEZ_PERMISSION_NONE, 154de02284cSSzymon Olewniczak 'task' => BEZ_PERMISSION_NONE, 155de02284cSSzymon Olewniczak 'state' => BEZ_PERMISSION_NONE, 156de02284cSSzymon Olewniczak 'tasktype' => BEZ_PERMISSION_NONE, 157de02284cSSzymon Olewniczak 'executor' => BEZ_PERMISSION_NONE, 158de02284cSSzymon Olewniczak 'cost' => BEZ_PERMISSION_NONE, 159de02284cSSzymon Olewniczak 'reason' => BEZ_PERMISSION_NONE, 160de02284cSSzymon Olewniczak 'reporter' => BEZ_PERMISSION_NONE, 161de02284cSSzymon Olewniczak 'date' => BEZ_PERMISSION_NONE, 162de02284cSSzymon Olewniczak 'close_date' => BEZ_PERMISSION_NONE, 163de02284cSSzymon Olewniczak 'cause' => BEZ_PERMISSION_NONE, 164de02284cSSzymon Olewniczak 'plan_date' => BEZ_PERMISSION_NONE, 165de02284cSSzymon Olewniczak 'all_day_event' => BEZ_PERMISSION_NONE, 166de02284cSSzymon Olewniczak 'start_time' => BEZ_PERMISSION_NONE, 167de02284cSSzymon Olewniczak 'finish_time' => BEZ_PERMISSION_NONE, 168de02284cSSzymon Olewniczak 'issue' => BEZ_PERMISSION_NONE, 169de02284cSSzymon Olewniczak 'task_cache' => BEZ_PERMISSION_NONE, 170de02284cSSzymon Olewniczak 'reason_cache' => BEZ_PERMISSION_NONE, 171de02284cSSzymon Olewniczak 'subscribents' => BEZ_PERMISSION_NONE 172de02284cSSzymon Olewniczak ); 173de02284cSSzymon Olewniczak 174de02284cSSzymon Olewniczak if ($this->level >= BEZ_AUTH_VIEWER) { 175de02284cSSzymon Olewniczak //user can display everythig 176de02284cSSzymon Olewniczak $acl = array_map(function($value) { 177de02284cSSzymon Olewniczak return BEZ_PERMISSION_VIEW; 178de02284cSSzymon Olewniczak }, $acl); 179de02284cSSzymon Olewniczak } 180de02284cSSzymon Olewniczak 181de02284cSSzymon Olewniczak if ($this->level >= BEZ_AUTH_ADMIN) { 182de02284cSSzymon Olewniczak //admin can edit everythig 183de02284cSSzymon Olewniczak $acl = array_map(function($value) { 184de02284cSSzymon Olewniczak return BEZ_PERMISSION_CHANGE; 185de02284cSSzymon Olewniczak }, $acl); 186de02284cSSzymon Olewniczak 187de02284cSSzymon Olewniczak return $acl; 188de02284cSSzymon Olewniczak } 189de02284cSSzymon Olewniczak 190de02284cSSzymon Olewniczak //we create new task 191de02284cSSzymon Olewniczak if ($task->id === NULL) { 192de02284cSSzymon Olewniczak 193de02284cSSzymon Olewniczak if ($task->coordinator === $this->model->user_nick || 194de02284cSSzymon Olewniczak ($task->issue === '' && $this->level >= BEZ_AUTH_LEADER)) { 195de02284cSSzymon Olewniczak $acl['task'] = BEZ_PERMISSION_CHANGE; 196de02284cSSzymon Olewniczak $acl['tasktype'] = BEZ_PERMISSION_CHANGE; 197de02284cSSzymon Olewniczak $acl['executor'] = BEZ_PERMISSION_CHANGE; 198de02284cSSzymon Olewniczak $acl['cost'] = BEZ_PERMISSION_CHANGE; 199de02284cSSzymon Olewniczak $acl['plan_date'] = BEZ_PERMISSION_CHANGE; 200de02284cSSzymon Olewniczak $acl['all_day_event'] = BEZ_PERMISSION_CHANGE; 201de02284cSSzymon Olewniczak $acl['start_time'] = BEZ_PERMISSION_CHANGE; 202de02284cSSzymon Olewniczak $acl['finish_time'] = BEZ_PERMISSION_CHANGE; 203de02284cSSzymon Olewniczak } 204de02284cSSzymon Olewniczak 205de02284cSSzymon Olewniczak //przypisujemy zadanie programowe samemu sobie 206de02284cSSzymon Olewniczak //no executor 207de02284cSSzymon Olewniczak if ($task->issue === '') { 208de02284cSSzymon Olewniczak $acl['task'] = BEZ_PERMISSION_CHANGE; 209de02284cSSzymon Olewniczak $acl['tasktype'] = BEZ_PERMISSION_CHANGE; 210de02284cSSzymon Olewniczak $acl['cost'] = BEZ_PERMISSION_CHANGE; 211de02284cSSzymon Olewniczak $acl['plan_date'] = BEZ_PERMISSION_CHANGE; 212de02284cSSzymon Olewniczak $acl['all_day_event'] = BEZ_PERMISSION_CHANGE; 213de02284cSSzymon Olewniczak $acl['start_time'] = BEZ_PERMISSION_CHANGE; 214de02284cSSzymon Olewniczak $acl['finish_time'] = BEZ_PERMISSION_CHANGE; 215de02284cSSzymon Olewniczak } 216de02284cSSzymon Olewniczak 217de02284cSSzymon Olewniczak return $acl; 218de02284cSSzymon Olewniczak } 219de02284cSSzymon Olewniczak 220de02284cSSzymon Olewniczak //user can change state 221de02284cSSzymon Olewniczak if ($task->executor === $this->model->user_nick) { 222de02284cSSzymon Olewniczak $acl['reason'] = BEZ_PERMISSION_CHANGE; 223de02284cSSzymon Olewniczak $acl['state'] = BEZ_PERMISSION_CHANGE; 224de02284cSSzymon Olewniczak } 225de02284cSSzymon Olewniczak 226de02284cSSzymon Olewniczak //reporters can add subscribents to programme task 227de02284cSSzymon Olewniczak if ($task->reporter === $this->model->user_nick) { 228de02284cSSzymon Olewniczak $acl['subscribents'] = BEZ_PERMISSION_CHANGE; 229de02284cSSzymon Olewniczak } 230de02284cSSzymon Olewniczak 231de02284cSSzymon Olewniczak if ($task->coordinator === $this->model->user_nick || 232de02284cSSzymon Olewniczak ($task->issue === '' && $this->level >= BEZ_AUTH_LEADER)) { 233de02284cSSzymon Olewniczak 234de02284cSSzymon Olewniczak $acl['reason'] = BEZ_PERMISSION_CHANGE; 235de02284cSSzymon Olewniczak $acl['state'] = BEZ_PERMISSION_CHANGE; 236de02284cSSzymon Olewniczak 237de02284cSSzymon Olewniczak //we can chante cause 238de02284cSSzymon Olewniczak $acl['cause'] = BEZ_PERMISSION_CHANGE; 239de02284cSSzymon Olewniczak 240de02284cSSzymon Olewniczak $acl['task'] = BEZ_PERMISSION_CHANGE; 241de02284cSSzymon Olewniczak $acl['tasktype'] = BEZ_PERMISSION_CHANGE; 242de02284cSSzymon Olewniczak $acl['executor'] = BEZ_PERMISSION_CHANGE; 243de02284cSSzymon Olewniczak $acl['cost'] = BEZ_PERMISSION_CHANGE; 244de02284cSSzymon Olewniczak $acl['reason'] = BEZ_PERMISSION_CHANGE; 245de02284cSSzymon Olewniczak $acl['plan_date'] = BEZ_PERMISSION_CHANGE; 246de02284cSSzymon Olewniczak $acl['all_day_event'] = BEZ_PERMISSION_CHANGE; 247de02284cSSzymon Olewniczak $acl['start_time'] = BEZ_PERMISSION_CHANGE; 248de02284cSSzymon Olewniczak $acl['finish_time'] = BEZ_PERMISSION_CHANGE; 249de02284cSSzymon Olewniczak 250de02284cSSzymon Olewniczak 251de02284cSSzymon Olewniczak //leaders can add subscribents to programme tasks 252de02284cSSzymon Olewniczak $acl['subscribents'] = BEZ_PERMISSION_CHANGE; 253de02284cSSzymon Olewniczak } 254de02284cSSzymon Olewniczak 255de02284cSSzymon Olewniczak if ($task->issue === '' && 256de02284cSSzymon Olewniczak $task->reporter === $this->model->user_nick && 257de02284cSSzymon Olewniczak $task->executor === $this->model->user_nick) { 258de02284cSSzymon Olewniczak $acl['reason'] = BEZ_PERMISSION_CHANGE; 259de02284cSSzymon Olewniczak $acl['state'] = BEZ_PERMISSION_CHANGE; 260de02284cSSzymon Olewniczak 261de02284cSSzymon Olewniczak $acl['task'] = BEZ_PERMISSION_CHANGE; 262de02284cSSzymon Olewniczak $acl['tasktype'] = BEZ_PERMISSION_CHANGE; 263de02284cSSzymon Olewniczak //no executor 264de02284cSSzymon Olewniczak $acl['cost'] = BEZ_PERMISSION_CHANGE; 265de02284cSSzymon Olewniczak $acl['reason'] = BEZ_PERMISSION_CHANGE; 266de02284cSSzymon Olewniczak $acl['plan_date'] = BEZ_PERMISSION_CHANGE; 267de02284cSSzymon Olewniczak $acl['all_day_event'] = BEZ_PERMISSION_CHANGE; 268de02284cSSzymon Olewniczak $acl['start_time'] = BEZ_PERMISSION_CHANGE; 269de02284cSSzymon Olewniczak $acl['finish_time'] = BEZ_PERMISSION_CHANGE; 270de02284cSSzymon Olewniczak } 271de02284cSSzymon Olewniczak 272de02284cSSzymon Olewniczak 273de02284cSSzymon Olewniczak return $acl; 274de02284cSSzymon Olewniczak 275de02284cSSzymon Olewniczak } 276*7fbf4c39SSzymon Olewniczak 277*7fbf4c39SSzymon Olewniczak private function static_thread_comment() { 278*7fbf4c39SSzymon Olewniczak $acl = array_fill_keys(Thread_comment::get_columns(), BEZ_PERMISSION_NONE); 279*7fbf4c39SSzymon Olewniczak 280*7fbf4c39SSzymon Olewniczak //virtual columns 281*7fbf4c39SSzymon Olewniczak 282*7fbf4c39SSzymon Olewniczak //BEZ_AUTH_VIEWER is also token viewer 283*7fbf4c39SSzymon Olewniczak if ($this->level >= BEZ_AUTH_VIEWER) { 284*7fbf4c39SSzymon Olewniczak //user can display everythig 285*7fbf4c39SSzymon Olewniczak $acl = array_map(function($value) { 286*7fbf4c39SSzymon Olewniczak return BEZ_PERMISSION_VIEW; 287*7fbf4c39SSzymon Olewniczak }, $acl); 288*7fbf4c39SSzymon Olewniczak } 289*7fbf4c39SSzymon Olewniczak 290*7fbf4c39SSzymon Olewniczak if ($this->level >= BEZ_AUTH_ADMIN) { 291*7fbf4c39SSzymon Olewniczak //user can edit everythig 292*7fbf4c39SSzymon Olewniczak $acl = array_map(function($value) { 293*7fbf4c39SSzymon Olewniczak return BEZ_PERMISSION_CHANGE; 294*7fbf4c39SSzymon Olewniczak }, $acl); 295*7fbf4c39SSzymon Olewniczak 296*7fbf4c39SSzymon Olewniczak return $acl; 297*7fbf4c39SSzymon Olewniczak } 298*7fbf4c39SSzymon Olewniczak } 299de02284cSSzymon Olewniczak 300de02284cSSzymon Olewniczak private function check_commcause($commcause) { 301de02284cSSzymon Olewniczak $acl = array( 302de02284cSSzymon Olewniczak 'id' => BEZ_PERMISSION_NONE, 303de02284cSSzymon Olewniczak 'issue' => BEZ_PERMISSION_NONE, 304de02284cSSzymon Olewniczak 'datetime' => BEZ_PERMISSION_NONE, 305de02284cSSzymon Olewniczak 'reporter' => BEZ_PERMISSION_NONE, 306de02284cSSzymon Olewniczak 'type' => BEZ_PERMISSION_NONE, 307de02284cSSzymon Olewniczak 'content' => BEZ_PERMISSION_NONE, 308de02284cSSzymon Olewniczak 'content_cache' => BEZ_PERMISSION_NONE 309de02284cSSzymon Olewniczak ); 310de02284cSSzymon Olewniczak 311de02284cSSzymon Olewniczak if ($this->level >= BEZ_AUTH_VIEWER) { 312de02284cSSzymon Olewniczak //user can display everythig 313de02284cSSzymon Olewniczak $acl = array_map(function($value) { 314de02284cSSzymon Olewniczak return BEZ_PERMISSION_VIEW; 315de02284cSSzymon Olewniczak }, $acl); 316de02284cSSzymon Olewniczak } 317de02284cSSzymon Olewniczak 318de02284cSSzymon Olewniczak if ($this->level >= BEZ_AUTH_ADMIN) { 319de02284cSSzymon Olewniczak //admin can edit everythig 320de02284cSSzymon Olewniczak $acl = array_map(function($value) { 321de02284cSSzymon Olewniczak return BEZ_PERMISSION_CHANGE; 322de02284cSSzymon Olewniczak }, $acl); 323de02284cSSzymon Olewniczak 324de02284cSSzymon Olewniczak return $acl; 325de02284cSSzymon Olewniczak } 326de02284cSSzymon Olewniczak //we create new commcause 327de02284cSSzymon Olewniczak if ($commcause->id === NULL) { 328de02284cSSzymon Olewniczak if ($this->level >= BEZ_USER) { 329de02284cSSzymon Olewniczak $acl['content'] = BEZ_PERMISSION_CHANGE; 330de02284cSSzymon Olewniczak } 331de02284cSSzymon Olewniczak 332de02284cSSzymon Olewniczak if ($commcause->coordinator === $this->model->user_nick) { 333de02284cSSzymon Olewniczak $acl['type'] = BEZ_PERMISSION_CHANGE; 334de02284cSSzymon Olewniczak $acl['content'] = BEZ_PERMISSION_CHANGE; 335de02284cSSzymon Olewniczak } 336de02284cSSzymon Olewniczak 337de02284cSSzymon Olewniczak return $acl; 338de02284cSSzymon Olewniczak } 339de02284cSSzymon Olewniczak 340de02284cSSzymon Olewniczak 341de02284cSSzymon Olewniczak if ($commcause->coordinator === $this->model->user_nick) { 342de02284cSSzymon Olewniczak $acl['type'] = BEZ_PERMISSION_CHANGE; 343de02284cSSzymon Olewniczak $acl['content'] = BEZ_PERMISSION_CHANGE; 344de02284cSSzymon Olewniczak 345de02284cSSzymon Olewniczak //we can only delete records when there is no tasks subscribed to issue 346de02284cSSzymon Olewniczak if ($commcause->tasks_count === 0) { 347de02284cSSzymon Olewniczak $acl['id'] = BEZ_PERMISSION_CHANGE; 348de02284cSSzymon Olewniczak } 349de02284cSSzymon Olewniczak 350de02284cSSzymon Olewniczak } 351de02284cSSzymon Olewniczak 352de02284cSSzymon Olewniczak //jeżeli ktoś zmieni typ z komentarza na przyczynę, tracimy możliwość edycji 353de02284cSSzymon Olewniczak if ($commcause->reporter === $this->model->user_nick && 354de02284cSSzymon Olewniczak $commcause->type === '0') { 355de02284cSSzymon Olewniczak $acl['content'] = BEZ_PERMISSION_CHANGE; 356de02284cSSzymon Olewniczak 357de02284cSSzymon Olewniczak //we can only delete records when there is no tasks subscribed to issue 358de02284cSSzymon Olewniczak if ($commcause->tasks_count === 0) { 359de02284cSSzymon Olewniczak $acl['id'] = BEZ_PERMISSION_CHANGE; 360de02284cSSzymon Olewniczak } 361de02284cSSzymon Olewniczak } 362de02284cSSzymon Olewniczak 363de02284cSSzymon Olewniczak return $acl; 364de02284cSSzymon Olewniczak 365de02284cSSzymon Olewniczak } 366de02284cSSzymon Olewniczak 367de02284cSSzymon Olewniczak private function static_label() { 368de02284cSSzymon Olewniczak $acl = array_fill_keys(Label::get_columns(), BEZ_PERMISSION_NONE); 369de02284cSSzymon Olewniczak 370de02284cSSzymon Olewniczak if ($this->level >= BEZ_AUTH_USER) { 371de02284cSSzymon Olewniczak //user can display everythig 372de02284cSSzymon Olewniczak $acl = array_map(function($value) { 373de02284cSSzymon Olewniczak return BEZ_PERMISSION_VIEW; 374de02284cSSzymon Olewniczak }, $acl); 375de02284cSSzymon Olewniczak } 376de02284cSSzymon Olewniczak 377de02284cSSzymon Olewniczak if ($this->level >= BEZ_AUTH_ADMIN) { 378de02284cSSzymon Olewniczak //admin can edit everythig 379de02284cSSzymon Olewniczak $acl = array_map(function($value) { 380de02284cSSzymon Olewniczak return BEZ_PERMISSION_CHANGE; 381de02284cSSzymon Olewniczak }, $acl); 382de02284cSSzymon Olewniczak } 383de02284cSSzymon Olewniczak 384de02284cSSzymon Olewniczak return $acl; 385de02284cSSzymon Olewniczak } 386de02284cSSzymon Olewniczak 387de02284cSSzymon Olewniczak private function check_label(Label $label) { 388de02284cSSzymon Olewniczak return $this->static_label(); 389de02284cSSzymon Olewniczak } 390de02284cSSzymon Olewniczak 391de02284cSSzymon Olewniczak private function check_tasktype($tasktype) { 392de02284cSSzymon Olewniczak $acl = array( 393de02284cSSzymon Olewniczak 'id' => BEZ_PERMISSION_NONE, 394de02284cSSzymon Olewniczak 'pl' => BEZ_PERMISSION_NONE, 395de02284cSSzymon Olewniczak 'en' => BEZ_PERMISSION_NONE 396de02284cSSzymon Olewniczak ); 397de02284cSSzymon Olewniczak 398de02284cSSzymon Olewniczak if ($this->level >= BEZ_AUTH_USER) { 399de02284cSSzymon Olewniczak //user can display everythig 400de02284cSSzymon Olewniczak $acl = array_map(function($value) { 401de02284cSSzymon Olewniczak return BEZ_PERMISSION_VIEW; 402de02284cSSzymon Olewniczak }, $acl); 403de02284cSSzymon Olewniczak } 404de02284cSSzymon Olewniczak 405de02284cSSzymon Olewniczak if ($this->level >= BEZ_AUTH_ADMIN) { 406de02284cSSzymon Olewniczak //admin can edit everythig 407de02284cSSzymon Olewniczak $acl = array_map(function($value) { 408de02284cSSzymon Olewniczak return BEZ_PERMISSION_CHANGE; 409de02284cSSzymon Olewniczak }, $acl); 410de02284cSSzymon Olewniczak } 411de02284cSSzymon Olewniczak 412de02284cSSzymon Olewniczak return $acl; 413de02284cSSzymon Olewniczak } 414de02284cSSzymon Olewniczak 415de02284cSSzymon Olewniczak /*returns array */ 416de02284cSSzymon Olewniczak public function check(Entity $obj) { 417de02284cSSzymon Olewniczak $method = 'check_'.$obj->get_table_name(); 418de02284cSSzymon Olewniczak if (!method_exists($this, $method)) { 419de02284cSSzymon Olewniczak throw new \Exception('no acl rules set for table: '.$obj->get_table_name()); 420de02284cSSzymon Olewniczak } 421de02284cSSzymon Olewniczak return $this->$method($obj); 422de02284cSSzymon Olewniczak } 423de02284cSSzymon Olewniczak 424de02284cSSzymon Olewniczak public function check_field(Entity $obj, $field) { 425de02284cSSzymon Olewniczak $acl = $this->check($obj); 426de02284cSSzymon Olewniczak 427de02284cSSzymon Olewniczak if (isset($acl[$field])) { 428de02284cSSzymon Olewniczak return $acl[$field]; 429de02284cSSzymon Olewniczak } 430de02284cSSzymon Olewniczak return BEZ_PERMISSION_UNKNOWN; 431de02284cSSzymon Olewniczak } 432de02284cSSzymon Olewniczak 433de02284cSSzymon Olewniczak public function check_static($table) { 434de02284cSSzymon Olewniczak $method = 'static_'.$table; 435de02284cSSzymon Olewniczak if (!method_exists($this, $method)) { 436de02284cSSzymon Olewniczak throw new \Exception('no acl rules set for table: '.$table); 437de02284cSSzymon Olewniczak } 438de02284cSSzymon Olewniczak return $this->$method($table); 439de02284cSSzymon Olewniczak } 440de02284cSSzymon Olewniczak 441de02284cSSzymon Olewniczak public function check_static_field($table, $field) { 442de02284cSSzymon Olewniczak $acl = $this->check_static($table); 443de02284cSSzymon Olewniczak return $acl[$field]; 444de02284cSSzymon Olewniczak } 445de02284cSSzymon Olewniczak 446de02284cSSzymon Olewniczak 447de02284cSSzymon Olewniczak public function can_change(Entity $obj, $field) { 448de02284cSSzymon Olewniczak if ($this->check_field($obj, $field) < BEZ_PERMISSION_CHANGE) { 449de02284cSSzymon Olewniczak $table = $obj->get_table_name(); 450de02284cSSzymon Olewniczak $id = $obj->id; 451de02284cSSzymon Olewniczak throw new PermissionDeniedException('user cannot change field "'.$field.'" in table "'.$table.', rowid: "'.$id.'"'); 452de02284cSSzymon Olewniczak } 453de02284cSSzymon Olewniczak } 454de02284cSSzymon Olewniczak} 455