File: Perms.php

package info (click to toggle)
php-horde-ingo 3.2.16-9
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, sid
  • size: 5,428 kB
  • sloc: php: 9,583; xml: 4,072; javascript: 184; makefile: 19; sh: 3
file content (119 lines) | stat: -rw-r--r-- 2,991 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
<?php
/**
 * Copyright 2014-2017 Horde LLC (http://www.horde.org/)
 *
 * See the enclosed file LICENSE for license information (ASL).  If you
 * did not receive this file, see http://www.horde.org/licenses/apache.

 * @category  Horde
 * @copyright 2013-2017 Horde LLC
 * @license   http://www.horde.org/licenses/gpl GPL
 * @package   Ingo
 */

/**
 * Permission handling for Ingo.
 *
 * @author    Michael Slusarz <slusarz@horde.org>
 * @category  Horde
 * @copyright 2014-2017 Horde LLC
 * @license   http://www.horde.org/licenses/apache ASL
 * @package   Ingo
 */
class Ingo_Perms
{
    /**
     * Permission list.
     *
     * @var array
     */
    private $_perms;

    /**
     * Constructor.
     */
    public function __construct()
    {
        $this->_perms = array(
            'max_blacklist' => array(
                'title' => _("Maximum number of blacklist addresses."),
                'type' => 'int'
            ),
            'max_forward' => array(
                'title' => _("Maximum number of forward addresses."),
                'type' => 'int'
            ),
            'max_rules' => array(
                'title' => _("Maximum number of rules (0 to disable rules editing)."),
                'type' => 'int'
            ),
            'max_whitelist' => array(
                'title' => _("Maximum number of whitelist addresses."),
                'type' => 'int'
            )
        );
    }

    /**
     * @see Horde_Registry_Application#perms()
     */
    public function perms()
    {
        $perms = array(
            'backends' => array(
                'title' => _("Backends")
            )
        );

        foreach (array_keys(Ingo::loadBackends()) as $key) {
            $bkey = 'backends:' . $key;

            $perms[$bkey] = array(
                'title' => $key
            );

            foreach ($this->_perms as $key2 => $val2) {
                $perms[$bkey . ':' . $key2] = array(
                    'title' => $val2['title'],
                    'type' => $val2['type']
                );
            }
        }

        return $perms;
    }

    /**
     * @see Horde_Registry_Application#hasPermission()
     */
    public function hasPermission($permission, $allowed, $opts)
    {
        if (($pos = strrpos($permission, ':')) !== false) {
            $permission = substr($permission, $pos + 1);
        }

        switch ($permission) {
        case 'max_blacklist':
        case 'max_forward':
        case 'max_rules':
        case 'max_whitelist':
            $allowed = max(array_map('intval', $allowed));
            break;
        }

        return $allowed;
    }

    /**
     * Get the full permission name for a permission.
     *
     * @param string $perm  The permission.
     *
     * @return string  The full (backend-specific) permission name.
     */
    static public function getPerm($perm)
    {
        return 'backends:' . $GLOBALS['session']->get('ingo', 'backend/id') . ':' . $perm;
    }

}