120 lines
2.9 KiB
PHP
120 lines
2.9 KiB
PHP
<?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;
|
|
}
|
|
|
|
}
|