Completed
Pull Request — master (#340)
by De Cramer
03:50
created

AdminGroupConfiguration::hasPermission()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 17
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 6.7968

Importance

Changes 0
Metric Value
dl 0
loc 17
ccs 2
cts 8
cp 0.25
rs 9.4285
c 0
b 0
f 0
cc 3
eloc 8
nc 3
nop 2
crap 6.7968
1
<?php
2
3
namespace eXpansion\Framework\AdminGroups\Services;
4
5
use eXpansion\Framework\Config\Model\ConfigInterface;
6
use eXpansion\Framework\Config\Services\ConfigManagerInterface;
7
8
/**
9
 * Class AdminGroupConfiguration
10
 *
11
 * @package eXpansion\Bundle\AdminGroupConfiguration\Services;
12
 * @author oliver de Cramer <[email protected]>
13
 */
14
class AdminGroupConfiguration
15
{
16
    /** @var ConfigInterface[][] */
17
    protected $config;
18
19
    /**
20
     * AdminGroupConfiguration constructor.
21
     *
22
     * @param ConfigManagerInterface $configManager
23
     * @param string $path
24
     */
25 14
    public function __construct(ConfigManagerInterface $configManager, $path)
26
    {
27 14
        foreach ($configManager->getConfigDefinitionTree()->get($path) as $groupName => $data) {
28 14
            foreach ($data as $key => $config) {
29 14
                if (strpos($key, 'perm_') === 0) {
30 14
                    $this->config[$groupName]['permissions'][str_replace('perm_', '', $key)] = $config;
31
                } else {
32 14
                    $this->config[$groupName][$key] = $config;
33
                }
34
            }
35
        }
36 14
    }
37
38
    /**
39
     * Get the list of all admin groups.
40
     *
41
     * @return string[]
42
     */
43 4
    public function getGroups()
44
    {
45 4
        return array_keys($this->config);
46
    }
47
48
    /**
49
     * Get list of all users in a group (not just connected).
50
     *
51
     * @param $groupName
52
     *
53
     * @return string[]|null
54
     */
55 3
    public function getGroupLogins($groupName)
56
    {
57 3
        if (!isset($this->config[$groupName])) {
58 2
            return null;
59
        }
60
61 1
        return $this->config[$groupName]['logins']->getRawValue();
62
    }
63
64
    /**
65
     * Get list of all permissions given to a group.
66
     *
67
     * @param string $groupName
68
     *
69
     * @return string[]
70
     */
71 1
    public function getGroupPermissions($groupName)
72
    {
73 1
        if (!isset($this->config[$groupName])) {
74 1
            return [];
75
        }
76
77 1
        return array_keys($this->config[$groupName]['permissions']);
78
    }
79
80
    /**
81
     * Get admin group label
82
     *
83
     * @param string $groupName
84
     * @return string
85
     */
86
    public function getGroupLabel($groupName)
87
    {
88
        if (!isset($this->config[$groupName])) {
89
            return "";
90
        }
91
92
        return $this->config[$groupName]['label']->get();
93
    }
94
95
96
    /**
97
     * @param string $login
98
     *
99
     * @return string|null
100
     */
101 6
    public function getLoginGroupName($login)
102
    {
103 6
        foreach ($this->config as $groupName => $group) {
104 6
            if (in_array($login, $group['logins']->getRawValue())) {
105
                return $groupName;
106
            }
107
        }
108
109
        return null;
110
    }
111
112
    /**
113
     * @param string $login
114
     * @param string $permission
115
     *
116
     * @return bool
117
     */
118 3
    public function hasPermission($login, $permission)
119
    {
120 3
        $groupName = $this->getLoginGroupName($login);
121
122
        // if login has no groups, no permission
123
        if ($groupName === null) {
124
            return false;
125
        }
126
        // master admin has all permissions
127
        if ($groupName == 'master_admin') {
128
            return true;
129
        }
130
131
        $permissions = $this->getGroupPermissions($groupName);
132
133
        return in_array($permission, $permissions);
134
    }
135
}
136