|
1
|
|
|
<?php |
|
2
|
|
|
|
|
3
|
|
|
/* |
|
4
|
|
|
* This file is part of the Tinyissue package. |
|
5
|
|
|
* |
|
6
|
|
|
* (c) Mohamed Alsharaf <[email protected]> |
|
7
|
|
|
* |
|
8
|
|
|
* For the full copyright and license information, please view the LICENSE |
|
9
|
|
|
* file that was distributed with this source code. |
|
10
|
|
|
*/ |
|
11
|
|
|
|
|
12
|
|
|
namespace Tinyissue\Http\Middleware; |
|
13
|
|
|
|
|
14
|
|
|
use Closure; |
|
15
|
|
|
use Illuminate\Contracts\Auth\Guard; |
|
16
|
|
|
use Illuminate\Http\Request; |
|
17
|
|
|
use Tinyissue\Model\Project as ProjectModel; |
|
18
|
|
|
|
|
19
|
|
|
/** |
|
20
|
|
|
* Permission is a Middleware class to for checking if current user has the permission to access the request |
|
21
|
|
|
* |
|
22
|
|
|
* @author Mohamed Alsharaf <[email protected]> |
|
23
|
|
|
*/ |
|
24
|
|
|
class Permission |
|
25
|
|
|
{ |
|
26
|
|
|
/** |
|
27
|
|
|
* The Guard implementation. |
|
28
|
|
|
* |
|
29
|
|
|
* @var Guard |
|
30
|
|
|
*/ |
|
31
|
|
|
protected $auth; |
|
32
|
|
|
|
|
33
|
|
|
/** |
|
34
|
|
|
* List of permissions that can be accessed by public users |
|
35
|
|
|
* |
|
36
|
|
|
* @var array |
|
37
|
|
|
*/ |
|
38
|
|
|
protected $publicAccess = [ |
|
39
|
|
|
'issue-view' |
|
40
|
|
|
]; |
|
41
|
|
|
|
|
42
|
|
|
/** |
|
43
|
|
|
* Create a new filter instance. |
|
44
|
|
|
* |
|
45
|
|
|
* @param Guard $auth |
|
46
|
|
|
*/ |
|
47
|
41 |
|
public function __construct(Guard $auth) |
|
48
|
|
|
{ |
|
49
|
41 |
|
$this->auth = $auth; |
|
50
|
41 |
|
} |
|
51
|
|
|
|
|
52
|
|
|
/** |
|
53
|
|
|
* Handle an incoming request. |
|
54
|
|
|
* |
|
55
|
|
|
* @param Request $request |
|
56
|
|
|
* @param \Closure $next |
|
57
|
|
|
* |
|
58
|
|
|
* @return mixed |
|
59
|
|
|
*/ |
|
60
|
40 |
|
public function handle(Request $request, Closure $next) |
|
61
|
|
|
{ |
|
62
|
40 |
|
$permission = $this->getPermission($request); |
|
63
|
40 |
|
$user = $this->auth->user(); |
|
64
|
|
|
/** @var ProjectModel|null $project */ |
|
65
|
40 |
|
$project = $request->route()->getParameter('project'); |
|
66
|
|
|
|
|
67
|
|
|
// Check if user has the permission |
|
68
|
|
|
// & if the user can access the current context (e.g. is one of the project users) |
|
69
|
40 |
|
if (app('tinyissue.settings')->isPublicProjectsEnabled() |
|
|
|
|
|
|
70
|
40 |
|
&& in_array($permission, $this->publicAccess) |
|
71
|
40 |
|
&& $project instanceof ProjectModel && !$project->isPrivate()) { |
|
72
|
|
|
// Ignore we are ok to view issues in public project |
|
73
|
40 |
|
} else if (!$this->auth->guest() |
|
74
|
40 |
|
&& (!$user->permission($permission) || !$user->permissionInContext($request->route()->parameters()))) { |
|
75
|
8 |
|
abort(401); |
|
76
|
|
|
} |
|
77
|
|
|
|
|
78
|
36 |
|
return $next($request); |
|
79
|
|
|
} |
|
80
|
|
|
|
|
81
|
|
|
/** |
|
82
|
|
|
* Returns the permission defined in route action |
|
83
|
|
|
* |
|
84
|
|
|
* @param Request $request |
|
85
|
|
|
* |
|
86
|
|
|
* @return mixed |
|
87
|
|
|
*/ |
|
88
|
40 |
|
protected function getPermission(Request $request) |
|
89
|
|
|
{ |
|
90
|
40 |
|
$actions = $request->route()->getAction(); |
|
91
|
|
|
|
|
92
|
40 |
|
return $actions['permission']; |
|
93
|
|
|
} |
|
94
|
|
|
} |
|
95
|
|
|
|
This check looks for the bodies of
ifstatements that have no statements or where all statements have been commented out. This may be the result of changes for debugging or the code may simply be obsolete.These
ifbodies can be removed. If you have an empty if but statements in theelsebranch, consider inverting the condition.could be turned into
This is much more concise to read.