Completed
Push — master ( e0683b...eed8e4 )
by ARCANEDEV
09:48 queued 08:04
created

AuthUserTrait::may()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 8
rs 9.4285
c 0
b 0
f 0
ccs 4
cts 4
cp 1
cc 1
eloc 4
nc 1
nop 1
crap 1
1
<?php namespace Arcanedev\LaravelAuth\Models\Traits;
2
3
use Arcanedev\LaravelAuth\Models\Permission;
4
use Arcanedev\LaravelAuth\Models\Relationships\UserRelationships;
5
use Arcanedev\LaravelAuth\Models\Role;
6
use Arcanedev\LaravelAuth\Models\Traits\AuthRoleTrait;
7
use Illuminate\Database\Eloquent\Collection;
8
9
/**
10
 * Trait     AuthUserTrait
11
 *
12
 * @package  Arcanedev\LaravelAuth\Traits
13
 * @author   ARCANEDEV <[email protected]>
14
 *
15
 * @property  \Illuminate\Database\Eloquent\Collection  permissions
16
 */
17
trait AuthUserTrait
18
{
19
    /* ------------------------------------------------------------------------------------------------
20
     |  Traits
21
     | ------------------------------------------------------------------------------------------------
22
     */
23
    use AuthRoleTrait, UserRelationships;
24
25
    /* ------------------------------------------------------------------------------------------------
26
     |  Getters & Setters
27
     | ------------------------------------------------------------------------------------------------
28
     */
29
    /**
30
     * Get all user permissions.
31
     *
32
     * @return \Illuminate\Database\Eloquent\Collection
33
     */
34 27
    public function getPermissionsAttribute()
35
    {
36 27
        $permissions = new Collection;
37
38 27
        foreach ($this->roles as $role) {
39
            /** @var Role $role */
40 27
            $permissions = $permissions->merge($role->permissions);
41 9
        }
42
43 27
        return $permissions;
44
    }
45
46
    /* ------------------------------------------------------------------------------------------------
47
     |  Permission Check Functions
48
     | ------------------------------------------------------------------------------------------------
49
     */
50
    /**
51
     * Check if the user has a permission.
52
     *
53
     * @param  string  $slug
54
     *
55
     * @return bool
56
     */
57
    public function may($slug)
58
    {
59 27
        $permissions = $this->permissions->filter(function(Permission $permission) use ($slug) {
60 27
            return $permission->slug === str_slug($slug, config('laravel-auth.slug-separator', '.'));
61 27
        });
62
63 27
        return ! $permissions->isEmpty();
64
    }
65
66
    /**
67
     * Check if the user has at least one permission.
68
     *
69
     * @param  array  $permissions
70
     * @param  array  $failedPermissions
71
     *
72
     * @return bool
73
     */
74 18
    public function mayOne(array $permissions, array &$failedPermissions = [])
75
    {
76 18
        foreach ($permissions as $permission) {
77 18
            if ( ! $this->may($permission))
78 18
                $failedPermissions[] = $permission;
79 6
        }
80
81 18
        return count($permissions) !== count($failedPermissions);
82
    }
83
84
    /**
85
     * Check if the user has all permissions.
86
     *
87
     * @param  array  $permissions
88
     * @param  array  $failedPermissions
89
     *
90
     * @return bool
91
     */
92 9
    public function mayAll(array $permissions, array &$failedPermissions = [])
93
    {
94 9
        $this->mayOne($permissions, $failedPermissions);
95
96 9
        return count($failedPermissions) === 0;
97
    }
98
}
99