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