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); 228a638198SSzymon 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 function update_level($level) { 31de02284cSSzymon Olewniczak if ($level > $this->level) { 32de02284cSSzymon Olewniczak $this->level = $level; 33de02284cSSzymon Olewniczak } 34de02284cSSzymon Olewniczak } 35de02284cSSzymon Olewniczak 36de02284cSSzymon Olewniczak public function get_level() { 37de02284cSSzymon Olewniczak return $this->level; 38de02284cSSzymon Olewniczak } 39de02284cSSzymon Olewniczak 40de02284cSSzymon Olewniczak public function __construct(Model $model) { 41de02284cSSzymon Olewniczak $this->model = $model; 42de02284cSSzymon Olewniczak 43de02284cSSzymon Olewniczak $userd = $this->model->dw_auth->getUserData($this->model->user_nick); 44de02284cSSzymon Olewniczak if ($userd !== false && is_array($userd['grps'])) { 45de02284cSSzymon Olewniczak $grps = $userd['grps']; 46de02284cSSzymon Olewniczak if (in_array('admin', $grps ) || in_array('bez_admin', $grps )) { 47de02284cSSzymon Olewniczak $this->update_level(BEZ_AUTH_ADMIN); 48de02284cSSzymon Olewniczak } elseif (in_array('bez_leader', $grps )) { 49de02284cSSzymon Olewniczak $this->update_level(BEZ_AUTH_LEADER); 50de02284cSSzymon Olewniczak } else { 51de02284cSSzymon Olewniczak $this->update_level(BEZ_AUTH_USER); 52de02284cSSzymon Olewniczak } 53de02284cSSzymon Olewniczak } elseif (isset($_GET['t'])) { 54e8827d73SSzymon Olewniczak $page_id = $this->model->action->id(); 55e8827d73SSzymon Olewniczak 56e8827d73SSzymon Olewniczak $user_tok = trim($_GET['t']); 57e8827d73SSzymon Olewniczak if ($this->model->authentication_tokenFactory->get_token($page_id) == $user_tok) { 58e8827d73SSzymon Olewniczak $this->update_level(BEZ_AUTH_VIEWER); 59e8827d73SSzymon Olewniczak } 60de02284cSSzymon Olewniczak } 61de02284cSSzymon Olewniczak } 62de02284cSSzymon Olewniczak 63de02284cSSzymon Olewniczak private function static_thread() { 64de02284cSSzymon Olewniczak $acl = array_fill_keys(Thread::get_columns(), BEZ_PERMISSION_NONE); 65de02284cSSzymon Olewniczak 66de02284cSSzymon Olewniczak //virtual columns 67de02284cSSzymon Olewniczak $acl['participants'] = BEZ_PERMISSION_NONE; 68de02284cSSzymon Olewniczak $acl['labels'] = BEZ_PERMISSION_NONE; 69de02284cSSzymon Olewniczak 70de02284cSSzymon Olewniczak //BEZ_AUTH_VIEWER is also token viewer 71de02284cSSzymon Olewniczak if ($this->level >= BEZ_AUTH_VIEWER) { 72de02284cSSzymon Olewniczak //user can display everythig 73de02284cSSzymon Olewniczak $acl = array_map(function($value) { 74de02284cSSzymon Olewniczak return BEZ_PERMISSION_VIEW; 75de02284cSSzymon Olewniczak }, $acl); 76de02284cSSzymon Olewniczak } 77de02284cSSzymon Olewniczak 78de02284cSSzymon Olewniczak if ($this->level >= BEZ_AUTH_ADMIN) { 79de02284cSSzymon Olewniczak //user can edit everythig 80de02284cSSzymon Olewniczak $acl = array_map(function($value) { 818a638198SSzymon Olewniczak return BEZ_PERMISSION_DELETE; 82de02284cSSzymon Olewniczak }, $acl); 83de02284cSSzymon Olewniczak 84de02284cSSzymon Olewniczak return $acl; 85de02284cSSzymon Olewniczak } 86de02284cSSzymon Olewniczak } 87de02284cSSzymon Olewniczak 88de02284cSSzymon Olewniczak 89de02284cSSzymon Olewniczak private function check_thread(Thread $thread) { 90de02284cSSzymon Olewniczak $acl = $this->static_thread(); 91de02284cSSzymon Olewniczak 92de02284cSSzymon Olewniczak //we create new issue 93de02284cSSzymon Olewniczak if ($thread->id === NULL) { 94de02284cSSzymon Olewniczak if ($this->level >= BEZ_AUTH_USER) { 95de02284cSSzymon Olewniczak $acl['title'] = BEZ_PERMISSION_CHANGE; 96de02284cSSzymon Olewniczak $acl['content'] = BEZ_PERMISSION_CHANGE; 97de02284cSSzymon Olewniczak } 98de02284cSSzymon Olewniczak 99de02284cSSzymon Olewniczak if ($this->level >= BEZ_AUTH_LEADER) { 100de02284cSSzymon Olewniczak $acl['coordinator'] = BEZ_PERMISSION_CHANGE; 101de02284cSSzymon Olewniczak } 102de02284cSSzymon Olewniczak 103de02284cSSzymon Olewniczak return $acl; 104de02284cSSzymon Olewniczak } 105de02284cSSzymon Olewniczak 106de02284cSSzymon Olewniczak if ($thread->state === 'proposal' && 107de02284cSSzymon Olewniczak $thread->original_poster === $this->model->user_nick) { 108de02284cSSzymon Olewniczak $acl['title'] = BEZ_PERMISSION_CHANGE; 109de02284cSSzymon Olewniczak $acl['content'] = BEZ_PERMISSION_CHANGE; 110de02284cSSzymon Olewniczak } 111de02284cSSzymon Olewniczak 112de02284cSSzymon Olewniczak if ($thread->coordinator === $this->model->user_nick) { 113de02284cSSzymon Olewniczak $acl['title'] = BEZ_PERMISSION_CHANGE; 114de02284cSSzymon Olewniczak $acl['content'] = BEZ_PERMISSION_CHANGE; 115de02284cSSzymon Olewniczak 116de02284cSSzymon Olewniczak //coordinator can change coordinator 117de02284cSSzymon Olewniczak $acl['coordinator'] = BEZ_PERMISSION_CHANGE; 118de02284cSSzymon Olewniczak 119de02284cSSzymon Olewniczak $acl['state'] = BEZ_PERMISSION_CHANGE; 120de02284cSSzymon Olewniczak } 121de02284cSSzymon Olewniczak 122de02284cSSzymon Olewniczak return $acl; 123de02284cSSzymon Olewniczak } 124de02284cSSzymon Olewniczak 1258a638198SSzymon Olewniczak private function static_task() { 1268a638198SSzymon Olewniczak $acl = array_fill_keys(Task::get_columns(), BEZ_PERMISSION_NONE); 127de02284cSSzymon Olewniczak 128e8827d73SSzymon Olewniczak //virtual columns 129e8827d73SSzymon Olewniczak $acl['participants'] = BEZ_PERMISSION_NONE; 130e8827d73SSzymon Olewniczak 1318a638198SSzymon Olewniczak //BEZ_AUTH_VIEWER is also token viewer 132de02284cSSzymon Olewniczak if ($this->level >= BEZ_AUTH_VIEWER) { 133de02284cSSzymon Olewniczak //user can display everythig 134de02284cSSzymon Olewniczak $acl = array_map(function($value) { 135de02284cSSzymon Olewniczak return BEZ_PERMISSION_VIEW; 136de02284cSSzymon Olewniczak }, $acl); 137de02284cSSzymon Olewniczak } 138de02284cSSzymon Olewniczak 139de02284cSSzymon Olewniczak if ($this->level >= BEZ_AUTH_ADMIN) { 1408a638198SSzymon Olewniczak //user can edit everythig 141de02284cSSzymon Olewniczak $acl = array_map(function($value) { 1428a638198SSzymon Olewniczak return BEZ_PERMISSION_DELETE; 143de02284cSSzymon Olewniczak }, $acl); 144de02284cSSzymon Olewniczak 145de02284cSSzymon Olewniczak return $acl; 146de02284cSSzymon Olewniczak } 1478a638198SSzymon Olewniczak } 1488a638198SSzymon Olewniczak 1498a638198SSzymon Olewniczak //if user can chante id => he can delete record 1508a638198SSzymon Olewniczak private function check_task($task) { 1518a638198SSzymon Olewniczak $acl = $this->static_task(); 152de02284cSSzymon Olewniczak 153de02284cSSzymon Olewniczak //we create new task 154de02284cSSzymon Olewniczak if ($task->id === NULL) { 155de02284cSSzymon Olewniczak 156ff14b107SSzymon Olewniczak if ($task->coordinator == $this->model->user_nick || 1578a638198SSzymon Olewniczak ($task->thread_id == '' && $this->level >= BEZ_AUTH_LEADER)) { 1588a638198SSzymon Olewniczak $acl['content'] = BEZ_PERMISSION_CHANGE; 1598a638198SSzymon Olewniczak $acl['task_program_id'] = BEZ_PERMISSION_CHANGE; 1608a638198SSzymon Olewniczak $acl['assignee'] = BEZ_PERMISSION_CHANGE; 161de02284cSSzymon Olewniczak $acl['cost'] = BEZ_PERMISSION_CHANGE; 162de02284cSSzymon Olewniczak $acl['plan_date'] = BEZ_PERMISSION_CHANGE; 163de02284cSSzymon Olewniczak $acl['all_day_event'] = BEZ_PERMISSION_CHANGE; 164de02284cSSzymon Olewniczak $acl['start_time'] = BEZ_PERMISSION_CHANGE; 165de02284cSSzymon Olewniczak $acl['finish_time'] = BEZ_PERMISSION_CHANGE; 166de02284cSSzymon Olewniczak } 167de02284cSSzymon Olewniczak 1688a638198SSzymon Olewniczak //no assignee 1698a638198SSzymon Olewniczak if ($task->thread_id == '') { 1708a638198SSzymon Olewniczak $acl['content'] = BEZ_PERMISSION_CHANGE; 1718a638198SSzymon Olewniczak $acl['task_program_id'] = BEZ_PERMISSION_CHANGE; 172de02284cSSzymon Olewniczak $acl['cost'] = BEZ_PERMISSION_CHANGE; 173de02284cSSzymon Olewniczak $acl['plan_date'] = BEZ_PERMISSION_CHANGE; 174de02284cSSzymon Olewniczak $acl['all_day_event'] = BEZ_PERMISSION_CHANGE; 175de02284cSSzymon Olewniczak $acl['start_time'] = BEZ_PERMISSION_CHANGE; 176de02284cSSzymon Olewniczak $acl['finish_time'] = BEZ_PERMISSION_CHANGE; 177de02284cSSzymon Olewniczak } 178de02284cSSzymon Olewniczak 179de02284cSSzymon Olewniczak return $acl; 180de02284cSSzymon Olewniczak } 181de02284cSSzymon Olewniczak 182de02284cSSzymon Olewniczak 183ff14b107SSzymon Olewniczak if ($task->coordinator == $this->model->user_nick || 1848a638198SSzymon Olewniczak ($task->thread_id == '' && $this->level >= BEZ_AUTH_LEADER)) { 185de02284cSSzymon Olewniczak 186de02284cSSzymon Olewniczak //we can chante cause 1878a638198SSzymon Olewniczak $acl['thread_comment_id'] = BEZ_PERMISSION_CHANGE; 188de02284cSSzymon Olewniczak 1898a638198SSzymon Olewniczak $acl['content'] = BEZ_PERMISSION_CHANGE; 1908a638198SSzymon Olewniczak $acl['task_program_id'] = BEZ_PERMISSION_CHANGE; 1918a638198SSzymon Olewniczak $acl['assignee'] = BEZ_PERMISSION_CHANGE; 192de02284cSSzymon Olewniczak $acl['cost'] = BEZ_PERMISSION_CHANGE; 1938a638198SSzymon Olewniczak //$acl['reason'] = BEZ_PERMISSION_CHANGE; 194de02284cSSzymon Olewniczak $acl['plan_date'] = BEZ_PERMISSION_CHANGE; 195de02284cSSzymon Olewniczak $acl['all_day_event'] = BEZ_PERMISSION_CHANGE; 196de02284cSSzymon Olewniczak $acl['start_time'] = BEZ_PERMISSION_CHANGE; 197de02284cSSzymon Olewniczak $acl['finish_time'] = BEZ_PERMISSION_CHANGE; 198de02284cSSzymon Olewniczak } 199de02284cSSzymon Olewniczak 2008a638198SSzymon Olewniczak if ($task->thread_id == '' && 2018a638198SSzymon Olewniczak $task->original_poster == $this->model->user_nick && 2028a638198SSzymon Olewniczak $task->assignee == $this->model->user_nick) { 203*16c7b168SSzymon Olewniczak 204de02284cSSzymon Olewniczak 2058a638198SSzymon Olewniczak $acl['content'] = BEZ_PERMISSION_CHANGE; 2068a638198SSzymon Olewniczak $acl['task_program_id'] = BEZ_PERMISSION_CHANGE; 207de02284cSSzymon Olewniczak //no executor 208de02284cSSzymon Olewniczak $acl['cost'] = BEZ_PERMISSION_CHANGE; 209de02284cSSzymon Olewniczak $acl['plan_date'] = BEZ_PERMISSION_CHANGE; 210de02284cSSzymon Olewniczak $acl['all_day_event'] = BEZ_PERMISSION_CHANGE; 211de02284cSSzymon Olewniczak $acl['start_time'] = BEZ_PERMISSION_CHANGE; 212de02284cSSzymon Olewniczak $acl['finish_time'] = BEZ_PERMISSION_CHANGE; 213de02284cSSzymon Olewniczak } 214de02284cSSzymon Olewniczak 215de02284cSSzymon Olewniczak 216de02284cSSzymon Olewniczak return $acl; 217de02284cSSzymon Olewniczak 218de02284cSSzymon Olewniczak } 2197fbf4c39SSzymon Olewniczak 2207fbf4c39SSzymon Olewniczak private function static_thread_comment() { 2217fbf4c39SSzymon Olewniczak $acl = array_fill_keys(Thread_comment::get_columns(), BEZ_PERMISSION_NONE); 2227fbf4c39SSzymon Olewniczak 2237fbf4c39SSzymon Olewniczak //virtual columns 2247fbf4c39SSzymon Olewniczak 2257fbf4c39SSzymon Olewniczak //BEZ_AUTH_VIEWER is also token viewer 2267fbf4c39SSzymon Olewniczak if ($this->level >= BEZ_AUTH_VIEWER) { 2277fbf4c39SSzymon Olewniczak //user can display everythig 2287fbf4c39SSzymon Olewniczak $acl = array_map(function($value) { 2297fbf4c39SSzymon Olewniczak return BEZ_PERMISSION_VIEW; 2307fbf4c39SSzymon Olewniczak }, $acl); 2317fbf4c39SSzymon Olewniczak } 2327fbf4c39SSzymon Olewniczak 2337fbf4c39SSzymon Olewniczak if ($this->level >= BEZ_AUTH_ADMIN) { 2347fbf4c39SSzymon Olewniczak //user can edit everythig 2357fbf4c39SSzymon Olewniczak $acl = array_map(function($value) { 2368a638198SSzymon Olewniczak return BEZ_PERMISSION_DELETE; 2377fbf4c39SSzymon Olewniczak }, $acl); 2387fbf4c39SSzymon Olewniczak 2397fbf4c39SSzymon Olewniczak return $acl; 2407fbf4c39SSzymon Olewniczak } 2417fbf4c39SSzymon Olewniczak } 242de02284cSSzymon Olewniczak 2438a638198SSzymon Olewniczak private function check_thread_comment(Thread_comment $thread_comment) { 2448a638198SSzymon Olewniczak $acl = $this->static_thread_comment(); 245de02284cSSzymon Olewniczak 246de02284cSSzymon Olewniczak //we create new commcause 2478a638198SSzymon Olewniczak if ($thread_comment->id === NULL) { 248e8827d73SSzymon Olewniczak if ($this->level >= BEZ_AUTH_USER) { 249de02284cSSzymon Olewniczak $acl['content'] = BEZ_PERMISSION_CHANGE; 250de02284cSSzymon Olewniczak } 251de02284cSSzymon Olewniczak 2528a638198SSzymon Olewniczak if ($thread_comment->coordinator === $this->model->user_nick) { 253de02284cSSzymon Olewniczak $acl['type'] = BEZ_PERMISSION_CHANGE; 254de02284cSSzymon Olewniczak $acl['content'] = BEZ_PERMISSION_CHANGE; 255de02284cSSzymon Olewniczak } 256de02284cSSzymon Olewniczak 257de02284cSSzymon Olewniczak return $acl; 258de02284cSSzymon Olewniczak } 259de02284cSSzymon Olewniczak 260de02284cSSzymon Olewniczak 2618a638198SSzymon Olewniczak if ($thread_comment->coordinator === $this->model->user_nick) { 262de02284cSSzymon Olewniczak $acl['type'] = BEZ_PERMISSION_CHANGE; 263de02284cSSzymon Olewniczak $acl['content'] = BEZ_PERMISSION_CHANGE; 264de02284cSSzymon Olewniczak 265de02284cSSzymon Olewniczak //we can only delete records when there is no tasks subscribed to issue 2668a638198SSzymon Olewniczak if ($thread_comment->task_count === 0) { 267de02284cSSzymon Olewniczak $acl['id'] = BEZ_PERMISSION_CHANGE; 268de02284cSSzymon Olewniczak } 269de02284cSSzymon Olewniczak 270de02284cSSzymon Olewniczak } 271de02284cSSzymon Olewniczak 272de02284cSSzymon Olewniczak //jeżeli ktoś zmieni typ z komentarza na przyczynę, tracimy możliwość edycji 2738a638198SSzymon Olewniczak if ($thread_comment->author === $this->model->user_nick && 2748a638198SSzymon Olewniczak $thread_comment->type == '0') { 275de02284cSSzymon Olewniczak $acl['content'] = BEZ_PERMISSION_CHANGE; 276de02284cSSzymon Olewniczak 277de02284cSSzymon Olewniczak //we can only delete records when there is no tasks subscribed to issue 2788a638198SSzymon Olewniczak if ($thread_comment->task_count === 0) { 279de02284cSSzymon Olewniczak $acl['id'] = BEZ_PERMISSION_CHANGE; 280de02284cSSzymon Olewniczak } 281de02284cSSzymon Olewniczak } 282de02284cSSzymon Olewniczak 283de02284cSSzymon Olewniczak return $acl; 284de02284cSSzymon Olewniczak 285de02284cSSzymon Olewniczak } 286de02284cSSzymon Olewniczak 287de02284cSSzymon Olewniczak private function static_label() { 288de02284cSSzymon Olewniczak $acl = array_fill_keys(Label::get_columns(), BEZ_PERMISSION_NONE); 289de02284cSSzymon Olewniczak 290de02284cSSzymon Olewniczak if ($this->level >= BEZ_AUTH_USER) { 291de02284cSSzymon Olewniczak //user can display everythig 292de02284cSSzymon Olewniczak $acl = array_map(function($value) { 293de02284cSSzymon Olewniczak return BEZ_PERMISSION_VIEW; 294de02284cSSzymon Olewniczak }, $acl); 295de02284cSSzymon Olewniczak } 296de02284cSSzymon Olewniczak 297de02284cSSzymon Olewniczak if ($this->level >= BEZ_AUTH_ADMIN) { 298de02284cSSzymon Olewniczak //admin can edit everythig 299de02284cSSzymon Olewniczak $acl = array_map(function($value) { 3008a638198SSzymon Olewniczak return BEZ_PERMISSION_DELETE; 301de02284cSSzymon Olewniczak }, $acl); 302de02284cSSzymon Olewniczak } 303de02284cSSzymon Olewniczak 304de02284cSSzymon Olewniczak return $acl; 305de02284cSSzymon Olewniczak } 306de02284cSSzymon Olewniczak 307de02284cSSzymon Olewniczak private function check_label(Label $label) { 308de02284cSSzymon Olewniczak return $this->static_label(); 309de02284cSSzymon Olewniczak } 310de02284cSSzymon Olewniczak 311e8827d73SSzymon Olewniczak private function static_task_program() { 312e8827d73SSzymon Olewniczak $acl = array_fill_keys(Task_program::get_columns(), BEZ_PERMISSION_NONE); 313de02284cSSzymon Olewniczak 314de02284cSSzymon Olewniczak if ($this->level >= BEZ_AUTH_USER) { 315de02284cSSzymon Olewniczak //user can display everythig 316de02284cSSzymon Olewniczak $acl = array_map(function($value) { 317de02284cSSzymon Olewniczak return BEZ_PERMISSION_VIEW; 318de02284cSSzymon Olewniczak }, $acl); 319de02284cSSzymon Olewniczak } 320de02284cSSzymon Olewniczak 321de02284cSSzymon Olewniczak if ($this->level >= BEZ_AUTH_ADMIN) { 322de02284cSSzymon Olewniczak //admin can edit everythig 323de02284cSSzymon Olewniczak $acl = array_map(function($value) { 324e8827d73SSzymon Olewniczak return BEZ_PERMISSION_DELETE; 325de02284cSSzymon Olewniczak }, $acl); 326de02284cSSzymon Olewniczak } 327de02284cSSzymon Olewniczak 328de02284cSSzymon Olewniczak return $acl; 329de02284cSSzymon Olewniczak } 330de02284cSSzymon Olewniczak 331e8827d73SSzymon Olewniczak private function check_task_program(Task_program $task_program) { 332e8827d73SSzymon Olewniczak return $this->static_label(); 333e8827d73SSzymon Olewniczak } 334e8827d73SSzymon Olewniczak 335e8827d73SSzymon Olewniczak private function static_task_comment() { 336e8827d73SSzymon Olewniczak $acl = array_fill_keys(Task_comment::get_columns(), BEZ_PERMISSION_NONE); 337e8827d73SSzymon Olewniczak 338e8827d73SSzymon Olewniczak //BEZ_AUTH_VIEWER is also token viewer 339e8827d73SSzymon Olewniczak if ($this->level >= BEZ_AUTH_VIEWER) { 340e8827d73SSzymon Olewniczak //user can display everythig 341e8827d73SSzymon Olewniczak $acl = array_map(function($value) { 342e8827d73SSzymon Olewniczak return BEZ_PERMISSION_VIEW; 343e8827d73SSzymon Olewniczak }, $acl); 344e8827d73SSzymon Olewniczak } 345e8827d73SSzymon Olewniczak 346e8827d73SSzymon Olewniczak if ($this->level >= BEZ_AUTH_ADMIN) { 347e8827d73SSzymon Olewniczak //user can edit everything 348e8827d73SSzymon Olewniczak $acl = array_map(function($value) { 349e8827d73SSzymon Olewniczak return BEZ_PERMISSION_DELETE; 350e8827d73SSzymon Olewniczak }, $acl); 351e8827d73SSzymon Olewniczak 352e8827d73SSzymon Olewniczak return $acl; 353e8827d73SSzymon Olewniczak } 354e8827d73SSzymon Olewniczak } 355e8827d73SSzymon Olewniczak 356e8827d73SSzymon Olewniczak private function check_task_comment(Task_comment $task_comment) { 357e8827d73SSzymon Olewniczak $acl = $this->static_task_comment(); 358e8827d73SSzymon Olewniczak 359e8827d73SSzymon Olewniczak //we create new comment 360e8827d73SSzymon Olewniczak if ($task_comment->id == NULL) { 361e8827d73SSzymon Olewniczak if ($this->level >= BEZ_AUTH_USER) { 362e8827d73SSzymon Olewniczak $acl['content'] = BEZ_PERMISSION_CHANGE; 363e8827d73SSzymon Olewniczak } 364e8827d73SSzymon Olewniczak 365e8827d73SSzymon Olewniczak return $acl; 366e8827d73SSzymon Olewniczak } 367e8827d73SSzymon Olewniczak 368e8827d73SSzymon Olewniczak 369e8827d73SSzymon Olewniczak if ($this->level >= BEZ_AUTH_LEADER) { 370e8827d73SSzymon Olewniczak $acl['id'] = BEZ_PERMISSION_DELETE; 371e8827d73SSzymon Olewniczak $acl['content'] = BEZ_PERMISSION_CHANGE; 372e8827d73SSzymon Olewniczak } 373e8827d73SSzymon Olewniczak 374e8827d73SSzymon Olewniczak 375e8827d73SSzymon Olewniczak if ($task_comment->author === $this->model->user_nick) { 376e8827d73SSzymon Olewniczak $acl['content'] = BEZ_PERMISSION_CHANGE; 377e8827d73SSzymon Olewniczak $acl['id'] = BEZ_PERMISSION_DELETE; 378e8827d73SSzymon Olewniczak } 379e8827d73SSzymon Olewniczak 380e8827d73SSzymon Olewniczak return $acl; 381e8827d73SSzymon Olewniczak 382e8827d73SSzymon Olewniczak } 383e8827d73SSzymon Olewniczak 384de02284cSSzymon Olewniczak /*returns array */ 385de02284cSSzymon Olewniczak public function check(Entity $obj) { 386de02284cSSzymon Olewniczak $method = 'check_'.$obj->get_table_name(); 387de02284cSSzymon Olewniczak if (!method_exists($this, $method)) { 388de02284cSSzymon Olewniczak throw new \Exception('no acl rules set for table: '.$obj->get_table_name()); 389de02284cSSzymon Olewniczak } 390de02284cSSzymon Olewniczak return $this->$method($obj); 391de02284cSSzymon Olewniczak } 392de02284cSSzymon Olewniczak 393de02284cSSzymon Olewniczak public function check_field(Entity $obj, $field) { 394de02284cSSzymon Olewniczak $acl = $this->check($obj); 395de02284cSSzymon Olewniczak 396de02284cSSzymon Olewniczak if (isset($acl[$field])) { 397de02284cSSzymon Olewniczak return $acl[$field]; 398de02284cSSzymon Olewniczak } 399de02284cSSzymon Olewniczak return BEZ_PERMISSION_UNKNOWN; 400de02284cSSzymon Olewniczak } 401de02284cSSzymon Olewniczak 402de02284cSSzymon Olewniczak public function check_static($table) { 403de02284cSSzymon Olewniczak $method = 'static_'.$table; 404de02284cSSzymon Olewniczak if (!method_exists($this, $method)) { 405de02284cSSzymon Olewniczak throw new \Exception('no acl rules set for table: '.$table); 406de02284cSSzymon Olewniczak } 407de02284cSSzymon Olewniczak return $this->$method($table); 408de02284cSSzymon Olewniczak } 409de02284cSSzymon Olewniczak 410de02284cSSzymon Olewniczak public function check_static_field($table, $field) { 411de02284cSSzymon Olewniczak $acl = $this->check_static($table); 412de02284cSSzymon Olewniczak return $acl[$field]; 413de02284cSSzymon Olewniczak } 414de02284cSSzymon Olewniczak 415de02284cSSzymon Olewniczak 4168a638198SSzymon Olewniczak public function can(Entity $obj, $field, $what=BEZ_PERMISSION_CHANGE) { 4178a638198SSzymon Olewniczak if ($this->check_field($obj, $field) < $what) { 418de02284cSSzymon Olewniczak $table = $obj->get_table_name(); 419de02284cSSzymon Olewniczak $id = $obj->id; 420de02284cSSzymon Olewniczak throw new PermissionDeniedException('user cannot change field "'.$field.'" in table "'.$table.', rowid: "'.$id.'"'); 421de02284cSSzymon Olewniczak } 422de02284cSSzymon Olewniczak } 423de02284cSSzymon Olewniczak} 424