Subversion-Projekte lars-tiefland.laravel_shop

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
148 lars 1
<?php
2
 
3
namespace Illuminate\Auth\Middleware;
4
 
5
use Closure;
6
use Illuminate\Contracts\Auth\Access\Gate;
7
use Illuminate\Database\Eloquent\Model;
8
 
9
class Authorize
10
{
11
    /**
12
     * The gate instance.
13
     *
14
     * @var \Illuminate\Contracts\Auth\Access\Gate
15
     */
16
    protected $gate;
17
 
18
    /**
19
     * Create a new middleware instance.
20
     *
21
     * @param  \Illuminate\Contracts\Auth\Access\Gate  $gate
22
     * @return void
23
     */
24
    public function __construct(Gate $gate)
25
    {
26
        $this->gate = $gate;
27
    }
28
 
29
    /**
30
     * Handle an incoming request.
31
     *
32
     * @param  \Illuminate\Http\Request  $request
33
     * @param  \Closure  $next
34
     * @param  string  $ability
35
     * @param  array|null  ...$models
36
     * @return mixed
37
     *
38
     * @throws \Illuminate\Auth\AuthenticationException
39
     * @throws \Illuminate\Auth\Access\AuthorizationException
40
     */
41
    public function handle($request, Closure $next, $ability, ...$models)
42
    {
43
        $this->gate->authorize($ability, $this->getGateArguments($request, $models));
44
 
45
        return $next($request);
46
    }
47
 
48
    /**
49
     * Get the arguments parameter for the gate.
50
     *
51
     * @param  \Illuminate\Http\Request  $request
52
     * @param  array|null  $models
53
     * @return \Illuminate\Database\Eloquent\Model|array|string
54
     */
55
    protected function getGateArguments($request, $models)
56
    {
57
        if (is_null($models)) {
58
            return [];
59
        }
60
 
61
        return collect($models)->map(function ($model) use ($request) {
62
            return $model instanceof Model ? $model : $this->getModel($request, $model);
63
        })->all();
64
    }
65
 
66
    /**
67
     * Get the model to authorize.
68
     *
69
     * @param  \Illuminate\Http\Request  $request
70
     * @param  string  $model
71
     * @return \Illuminate\Database\Eloquent\Model|string
72
     */
73
    protected function getModel($request, $model)
74
    {
75
        if ($this->isClassName($model)) {
76
            return trim($model);
77
        } else {
78
            return $request->route($model, null) ??
79
                ((preg_match("/^['\"](.*)['\"]$/", trim($model), $matches)) ? $matches[1] : null);
80
        }
81
    }
82
 
83
    /**
84
     * Checks if the given string looks like a fully qualified class name.
85
     *
86
     * @param  string  $value
87
     * @return bool
88
     */
89
    protected function isClassName($value)
90
    {
91
        return str_contains($value, '\\');
92
    }
93
}