xref: /plugin/bez/mdl/Acl.php (revision 8a6381983135ed7de69b33e64aa0c1b16dbf69b0)
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