Completed
Push — master ( 2efb03...e35f94 )
by Mikaël
08:04
created

Authorizable::authorizedToViewAny()   A

Complexity

Conditions 3
Paths 1

Size

Total Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 14
rs 9.7998
c 0
b 0
f 0
cc 3
nc 1
nop 1
1
<?php
2
3
namespace BBSLab\NovaPermission\Traits;
4
5
use Illuminate\Http\Request;
6
use Illuminate\Support\Facades\Cache;
7
use Illuminate\Support\Facades\Gate;
8
use Laravel\Nova\Authorizable as BaseTrait;
9
10
trait Authorizable
11
{
12
    use BaseTrait;
13
14
    public static function hasAbilities(): bool
15
    {
16
        return isset(static::$permissionsForAbilities) && ! empty(static::$permissionsForAbilities);
17
    }
18
19
    public static function cacheTtl()
20
    {
21
        return config('nova-permission.gate_cache');
22
    }
23
24
    public static function cacheKey(string $action, $request, $resource = null)
25
    {
26
        return implode(':', array_filter([
27
            'administrator',
28
            optional($request->user())->getKey() ?? 'unauthenticated',
29
            'can',
30
            $action,
31
            static::$model,
32
            optional($resource)->getKey(),
33
        ]));
34
    }
35
36
    /**
37
     * Determine if the resource should be available for the given request.
38
     *
39
     * @param  \Illuminate\Http\Request  $request
40
     * @return bool
41
     */
42
    public static function authorizedToViewAny(Request $request)
43
    {
44
        $key = static::cacheKey('viewAny', $request);
45
46
        return Cache::remember($key, static::cacheTtl(), function () use ($request) {
47
            if (! static::authorizable()) {
48
                return true;
49
            }
50
51
            return method_exists(Gate::getPolicyFor(static::newModel()), 'viewAny')
52
                ? Gate::check('viewAny', get_class(static::newModel()))
53
                : true;
54
        });
55
    }
56
57
    /**
58
     * Determine if the current user can create new resources.
59
     *
60
     * @param  \Illuminate\Http\Request  $request
61
     * @return bool
62
     */
63
    public static function authorizedToCreate(Request $request)
64
    {
65
        $key = static::cacheKey('create', $request);
66
67
        return Cache::remember($key, static::cacheTtl(), function () {
68
            if (static::authorizable()) {
69
                return Gate::check('create', get_class(static::newModel()));
70
            }
71
72
            return true;
73
        });
74
    }
75
76
    /**
77
     * Determine if the current user can view the given resource.
78
     *
79
     * @param  \Illuminate\Http\Request  $request
80
     * @param  string  $ability
81
     * @return bool
82
     */
83
    public function authorizedTo(Request $request, $ability)
84
    {
85
        $key = static::cacheKey($ability, $request, $this->resource);
86
87
        return Cache::remember($key, static::cacheTtl(), function () use ($ability) {
88
            return static::authorizable() ? Gate::check($ability, $this->resource) : true;
89
        });
90
    }
91
}
92