Completed
Pull Request — master (#4)
by
unknown
02:33
created

byGroup   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 39
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 0

Importance

Changes 2
Bugs 0 Features 0
Metric Value
wmc 6
c 2
b 0
f 0
lcom 0
cbo 0
dl 0
loc 39
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
A getGroups() 0 9 2
A expandGroup() 0 15 4
1
<?php
2
3
namespace Jasny\Authz;
4
5
/**
6
 * Authorize by access group.
7
 * Can be used for ACL (Access Control List).
8
 * 
9
 * <code>
10
 *   class Auth extends Jasny\Auth
11
 *   {
12
 *     use Jasny\Authz\ByGroup;
13
 *
14
 *     protected static $groups = [
15
 *       'user' => [],
16
 *       'developer' => ['user'],
17
 *       'accountant' => ['user'],
18
 *       'admin' => ['developer', 'accountant']
19
 *     ];
20
 *   }
21
 * </code>
22
 *
23
 * IMPORTANT: Your User class also needs to implement Jasny\Authz\User
24
 * <code>
25
 *   class User implements Jasny\Auth\User, Jasny\Authz\User
26
 *   {
27
 *     ...
28
 *   
29
 *     public function hasRole($role)
30
 *     {
31
 *       return in_array($role, Auth::expandGroup($this->group));
32
 *     }
33
 *   }
34
 * </code>
35
 */
36
trait byGroup
37
{
38
    /**
39
     * Get all auth groups
40
     *  
41
     * @return array
42
     */
43
    public static function getGroups()
44
    {
45
        if (!isset(static::$groups)) {
46
            trigger_error("Auth groups aren't set", E_USER_WARNING);
47
            return [];
48
        }
49
        
50
        return static::$groups;
51
    }
52
    
53
    /**
54
     * Get group and all groups it embodies.
55
     *  
56
     * @param string|array $groups  Single group or array of groups
57
     * @return array
58
     */
59
    public static function expandGroup($groups)
60
    {
61
        if (!is_array($groups)) $groups = (array)$groups;
62
        
63
        $allGroups = static::getGroups();
64
        $expanded = $groups;
65
        
66
        foreach ($groups as $group) {
67
            if (!empty($allGroups[$group])) {
68
                $expanded = array_merge($groups, static::expandGroup($allGroups[$group]));
69
            }
70
        }
71
        
72
        return array_unique($expanded);
73
    }
74
}
75