AuthServiceProvider::register()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
eloc 1
nc 1
nop 0
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) {
0 ignored issues
show
Unused Code Comprehensibility introduced by
70% of this comment could be valid code. Did you maybe forget this after debugging?

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.

Loading history...
35
        //     if ($request->input('api_token')) {
0 ignored issues
show
Unused Code Comprehensibility introduced by
70% of this comment could be valid code. Did you maybe forget this after debugging?

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.

Loading history...
36
        //         return User::where('api_token', $request->input('api_token'))->first();
0 ignored issues
show
Unused Code Comprehensibility introduced by
69% of this comment could be valid code. Did you maybe forget this after debugging?

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.

Loading history...
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) {
0 ignored issues
show
Unused Code Comprehensibility introduced by
60% of this comment could be valid code. Did you maybe forget this after debugging?

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.

Loading history...
64
                //     if($user->is_admin){
0 ignored issues
show
Unused Code Comprehensibility introduced by
75% of this comment could be valid code. Did you maybe forget this after debugging?

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.

Loading history...
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