Completed
Push — master ( 767130...685af6 )
by De Cramer
9s
created

AdminGroupConfiguration::getGroups()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
ccs 2
cts 2
cp 1
cc 1
eloc 2
nc 1
nop 0
crap 1
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 4
    public function getGroupLogins($groupName)
56
    {
57 4
        if (!isset($this->config[$groupName])) {
58 4
            return null;
59
        }
60
61 2
        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 5
    public function getGroupPermissions($groupName)
72
    {
73 5
        if (!isset($this->config[$groupName])) {
74 1
            return [];
75
        }
76
77 5
        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 7
    public function getLoginGroupName($login)
102
    {
103 7
        foreach ($this->config as $groupName => $group) {
104 7
            if (in_array($login, $group['logins']->getRawValue())) {
105 7
                return $groupName;
106
            }
107
        }
108
109 6
        return null;
110
    }
111
112
    /**
113
     * @param string $login
114
     * @param string $permission
115
     *
116
     * @return bool
117
     */
118 4
    public function hasPermission($login, $permission)
119
    {
120 4
        $groupName = $this->getLoginGroupName($login);
121
122
        // if login has no groups, no permission
123 4
        if ($groupName === null) {
124 3
            return false;
125
        }
126
        // master admin has all permissions
127 4
        if ($groupName == 'master_admin') {
128 4
            return true;
129
        }
130
131 4
        $permissions = $this->getGroupPermissions($groupName);
132
133 4
        return in_array($permission, $permissions);
134
    }
135
}
136