1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
namespace App\Providers; |
4
|
|
|
|
5
|
|
|
use App\User; |
6
|
|
|
use Illuminate\Support\Facades\Gate; |
7
|
|
|
use Illuminate\Support\ServiceProvider; |
8
|
|
|
|
9
|
|
|
class AuthServiceProvider extends ServiceProvider |
10
|
|
|
{ |
11
|
|
|
/** |
12
|
|
|
* Register any application services. |
13
|
|
|
* |
14
|
|
|
* @return void |
15
|
|
|
*/ |
16
|
|
|
public function register() |
17
|
|
|
{ |
18
|
|
|
// |
19
|
|
|
} |
20
|
|
|
|
21
|
|
|
/** |
22
|
|
|
* Boot the authentication services for the application. |
23
|
|
|
* |
24
|
|
|
* @return void |
25
|
|
|
* @see https://lumen.laravel.com/docs/authorization |
26
|
|
|
*/ |
27
|
|
|
public function boot() |
28
|
|
|
{ |
29
|
|
|
// Here you may define how you wish users to be authenticated for your Lumen |
30
|
|
|
// application. The callback which receives the incoming request instance |
31
|
|
|
// should return either a User instance or null. You're free to obtain |
32
|
|
|
// the User instance via an API token or any other method necessary. |
33
|
|
|
|
34
|
|
|
// $this->app['auth']->viaRequest('api', function ($request) { |
|
|
|
|
35
|
|
|
// if ($request->input('api_token')) { |
|
|
|
|
36
|
|
|
// return User::where('api_token', $request->input('api_token'))->first(); |
|
|
|
|
37
|
|
|
// } |
38
|
|
|
// }); |
39
|
|
|
|
40
|
|
|
// Group & Define simillar Abilities |
41
|
|
|
$this->isOwner([ |
42
|
|
|
'posts' => ['destroy', 'update'], |
43
|
|
|
'comments' => ['destroy', 'update'] |
44
|
|
|
]); |
45
|
|
|
|
46
|
|
|
$this->isAdmin([ |
47
|
|
|
'users' => ['store', 'destroy', 'update'] |
48
|
|
|
]); |
49
|
|
|
} |
50
|
|
|
|
51
|
|
|
/** |
52
|
|
|
* Define abilities that checks if the current user is the owner of the requested resource. |
53
|
|
|
* In case of admin user, it will return true. |
54
|
|
|
* |
55
|
|
|
* @param array $arguments |
56
|
|
|
* @return boolean |
57
|
|
|
*/ |
58
|
|
|
private function isOwner($arguments = []){ |
59
|
|
|
|
60
|
|
|
foreach ($arguments as $resource => $actions) { |
61
|
|
|
foreach ($actions as $action) { |
62
|
|
|
|
63
|
|
|
// Gate::before(function ($user, $ability) { |
|
|
|
|
64
|
|
|
// if($user->is_admin){ |
|
|
|
|
65
|
|
|
// return true; |
66
|
|
|
// } |
67
|
|
|
// }); |
68
|
|
|
|
69
|
|
|
Gate::define($this->ability($action, $resource), function ($user, $arg) { |
70
|
|
|
|
71
|
|
|
if(is_null($arg)) { return false; } |
72
|
|
|
|
73
|
|
|
return $arg->user_id === $user->id || $user->is_admin; |
74
|
|
|
}); |
75
|
|
|
} |
76
|
|
|
} |
77
|
|
|
} |
78
|
|
|
|
79
|
|
|
/** |
80
|
|
|
* Define abilities that checks if the current user is admin. |
81
|
|
|
* |
82
|
|
|
* @param array $arguments |
83
|
|
|
* @return boolean |
84
|
|
|
*/ |
85
|
|
|
private function isAdmin($arguments){ |
86
|
|
|
|
87
|
|
|
foreach ($arguments as $resource => $actions) { |
88
|
|
|
foreach ($actions as $action) { |
89
|
|
|
Gate::define($this->ability($action, $resource), function ($user) { |
90
|
|
|
return $user->is_admin; |
91
|
|
|
}); |
92
|
|
|
} |
93
|
|
|
} |
94
|
|
|
} |
95
|
|
|
|
96
|
|
|
/** |
97
|
|
|
* Define ability string. |
98
|
|
|
* |
99
|
|
|
* @param string $action |
100
|
|
|
* @param string $resource |
101
|
|
|
* @return string |
102
|
|
|
*/ |
103
|
|
|
private function ability($action, $resource){ |
104
|
|
|
return "{$action}-{$resource}"; |
105
|
|
|
} |
106
|
|
|
|
107
|
|
|
} |
108
|
|
|
|
Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.
The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.
This check looks for comments that seem to be mostly valid code and reports them.