Passed
Push — master ( 5d1dbf...ac3204 )
by Paul
04:29
created

HasPermissions::tokenPermissions()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 15
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 3
eloc 7
c 1
b 0
f 0
nc 3
nop 1
dl 0
loc 15
rs 10
1
<?php
2
3
namespace Devpri\Tinre\Traits;
4
5
trait HasPermissions
6
{
7
    public function permissions() {
8
        if($this->accessToken) {
9
            return $this->tokenPermissions($this->accessToken);
10
        }
11
12
        $permissions = config("tinre.role_permissions.{$this->role}");
13
14
        if(in_array('*', $permissions)) {
15
            return config("tinre.permissions");
16
        }
17
        
18
        return $permissions;
19
    }
20
21
    public function apiPermissions() {
22
        $permissions = config("tinre.role_permissions.{$this->role}");
23
        
24
        if(in_array('*', $permissions)) {
25
            $permissions = config("tinre.permissions");
26
        }
27
        
28
        return array_intersect($permissions, config('tinre.api_permissions'));
29
    }
30
    
31
    public function tokenPermissions($accessToken)
32
    {
33
        $tokenPermissions = $accessToken->permissions;
34
35
        if(! is_array($tokenPermissions)) {
36
            return [];
37
        }
38
39
        $apiPermissions = $this->apiPermissions();
40
            
41
        if(in_array('*', $apiPermissions)) {
42
            return $apiPermissions;
43
        }
44
45
        return array_intersect($apiPermissions, $apiPermissions);
46
    }
47
48
    public function hasPermissionTo($permission)
49
    {
50
        $userPermissions = $this->permissions();
51
        
52
        if(in_array($permission, $userPermissions)) {
53
            return true;
54
        }
55
        
56
        return false;
57
    }
58
59
    public function hasAnyPermission($permissions)
60
    {        
61
        foreach($permissions as $permission) {
62
            if($this->hasPermissionTo($permission)) {
63
                return true;
64
            }
65
        }
66
67
        return false;
68
    }
69
}
70