Passed
Pull Request — 2.x (#1049)
by
unknown
07:15
created

PermissionAuthServiceProvider::boot()   D

Complexity

Conditions 31
Paths 1

Size

Total Lines 179
Code Lines 91

Duplication

Lines 0
Ratio 0 %

Importance

Changes 4
Bugs 0 Features 0
Metric Value
cc 31
eloc 91
nc 1
nop 0
dl 0
loc 179
rs 4.1666
c 4
b 0
f 0

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
namespace A17\Twill;
4
5
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
6
use Illuminate\Support\Facades\Config;
7
use Illuminate\Support\Facades\Gate;
8
9
class PermissionAuthServiceProvider extends ServiceProvider
10
{
11
    protected static $cache = [];
12
13
    protected function authorize($user, $callback, $moduleName = null)
0 ignored issues
show
Unused Code introduced by
The parameter $moduleName is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

13
    protected function authorize($user, $callback, /** @scrutinizer ignore-unused */ $moduleName = null)

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
14
    {
15
        if ($user->is_superadmin) {
16
            return true;
17
        }
18
19
        if (!$user->published) {
20
            return false;
21
        }
22
23
        return $callback($user);
24
    }
25
26
    public function boot()
27
    {
28
        /***
29
         *
30
         *    Global permissions
31
         *
32
         ***/
33
34
        Gate::define('edit-settings', function ($user) {
35
            return $this->authorize($user, function ($user) {
36
                return $user->role->permissions()->global()->where('name', 'edit-settings')->exists();
37
            });
38
        });
39
40
        Gate::define('edit-users', function ($user) {
41
            return $this->authorize($user, function ($user) {
42
                return $user->role->permissions()->global()->where('name', 'edit-users')->exists();
43
            });
44
        });
45
46
        Gate::define('edit-user', function ($user, $editedUser) {
47
            return $this->authorize($user, function ($user) use ($editedUser) {
48
                return ($user->id === $editedUser->id) || $user->can('edit-users');
49
            });
50
        });
51
52
        Gate::define('edit-user-role', function ($user) {
53
            return $this->authorize($user, function ($user) {
54
                return $user->role->permissions()->global()->where('name', 'edit-user-role')->exists();
55
            });
56
        });
57
58
        Gate::define('edit-user-groups', function ($user) {
59
            if (!in_array(Config::get('twill.permissions.level'), ['roleGroup', 'roleGroupModule'])) {
60
                return false;
61
            }
62
63
            return $this->authorize($user, function ($user) {
64
                return $user->role->permissions()->global()->where('name', 'edit-user-groups')->exists();
65
            });
66
        });
67
68
        Gate::define('access-user-management', function ($user) {
69
            return $this->authorize($user, function ($user) {
70
                return $user->can('edit-users') || $user->can('edit-user-role') || $user->can('edit-user-groups');
71
            });
72
        });
73
74
        Gate::define('manage-modules', function ($user) {
75
            if (isset(self::$cache['manage-modules'])) {
76
                return self::$cache['manage-modules'];
77
            }
78
79
            return self::$cache['manage-modules'] = $this->authorize($user, function ($user) {
80
                return $user->role->permissions()->global()->where('name', 'manage-modules')->exists()
81
                || isUserGroupPermissionModuleExists($user, 'global', 'manage-modules');
82
            });
83
        });
84
85
        Gate::define('access-media-library', function ($user) {
86
            return $this->authorize($user, function ($user) {
87
                return $user->role->permissions()->global()->where('name', 'access-media-library')->exists();
88
            });
89
        });
90
91
        Gate::define('edit-media-library', function ($user) {
92
            return $this->authorize($user, function ($user) {
93
                return $user->role->permissions()->global()->where('name', 'edit-media-library')->exists();
94
            });
95
        });
96
97
        Gate::define('impersonate', function ($user) {
98
            return $this->authorize($user, function ($user) {
99
                return $user->is_superadmin;
100
            });
101
        });
102
103
        /***
104
         *
105
         *    Module permissions
106
         *
107
         ***/
108
109
        Gate::define('access-module-list', function ($user, $moduleName) {
110
            if (isset(self::$cache['access-module-list-' . $moduleName])) {
111
                return self::$cache['access-module-list-' . $moduleName];
112
            }
113
114
            return self::$cache['access-module-list-' . $moduleName] = $this->authorize($user, function ($user) use ($moduleName) {
115
                return $user->can('view-module', $moduleName)
116
                || $user->allPermissions()->ofModuleName($moduleName)->exists();
117
            });
118
        });
119
120
        // The gate of accessing module list page,
121
        Gate::define('view-module', function ($user, $moduleName) {
122
            if (isset(self::$cache['view-module-' . $moduleName])) {
123
                return self::$cache['view-module-' . $moduleName];
124
            }
125
126
            return self::$cache['view-module-' . $moduleName] = $this->authorize($user, function ($user) use ($moduleName) {
127
                return $user->can('edit-module', $moduleName)
128
                || $user->role->permissions()->ofModuleName($moduleName)->where('name', 'view-module')->exists()
129
                || isUserGroupPermissionModuleExists($user, $moduleName, 'view-module');
130
            });
131
        });
132
133
        Gate::define('edit-module', function ($user, $moduleName) {
134
            if (isset(self::$cache['edit-module-' . $moduleName])) {
135
                return self::$cache['edit-module-' . $moduleName];
136
            }
137
138
            return self::$cache['edit-module-' . $moduleName] = $this->authorize($user, function ($user) use ($moduleName) {
139
                return $user->can('manage-module', $moduleName)
140
                || $user->role->permissions()->module()->ofModuleName($moduleName)->where('name', 'edit-module')->exists()
141
                || isUserGroupPermissionModuleExists($user, $moduleName, 'edit-module');
142
            });
143
        });
144
145
        Gate::define('manage-module', function ($user, $moduleName) {
146
            if (isset(self::$cache['manage-module-' . $moduleName])) {
147
                return self::$cache['manage-module-' . $moduleName];
148
            }
149
150
            return self::$cache['manage-module-' . $moduleName] = $this->authorize($user, function ($user) use ($moduleName) {
151
                if (!isPermissionableModule($moduleName)) {
152
                    return true;
153
                }
154
                return $user->can('manage-modules')
155
                || $user->role->permissions()->module()->ofModuleName($moduleName)->where('name', 'manage-module')->exists()
156
                || isUserGroupPermissionModuleExists($user, $moduleName, 'manage-module');
157
            });
158
        });
159
160
        /***
161
         *
162
         *    Module item permissions
163
         *
164
         ***/
165
166
        Gate::define('view-item', function ($user, $item) {
167
            $key = 'view-item-' . str_replace("\\", "-", get_class($item)) . '-' . $item->id;
168
            if (isset(self::$cache[$key])) {
169
                return self::$cache[$key];
170
            }
171
172
            return self::$cache[$key] = $this->authorize($user, function ($user) use ($item) {
173
                return $item->public
174
                || $user->can('edit-item', $item)
175
                || $user->can('view-module', getModuleNameByModel(get_class($item)))
176
                || $user->permissions()->ofItem($item)->where('name', 'view-item')->exists()
177
                || isUserGroupPermissionItemExists($user, $item, 'view-item');
178
            });
179
        });
180
181
        Gate::define('edit-item', function ($user, $item) {
182
            $key = 'edit-item-' . str_replace("\\", "-", get_class($item)) . '-' . $item->id;
183
            if (isset(self::$cache[$key])) {
184
                return self::$cache[$key];
185
            }
186
187
            return self::$cache[$key] = $this->authorize($user, function ($user) use ($item) {
188
                return $user->can('manage-item', $item)
189
                || $user->can('edit-module', getModuleNameByModel(get_class($item)))
190
                || $user->permissions()->ofItem($item)->where('name', 'edit-item')->exists()
191
                || isUserGroupPermissionItemExists($user, $item, 'edit-item');
192
            });
193
        });
194
195
        Gate::define('manage-item', function ($user, $item) {
196
            $key = 'manage-item-' . str_replace("\\", "-", get_class($item)) . '-' . $item->id;
197
            if (isset(self::$cache[$key])) {
198
                return self::$cache[$key];
199
            }
200
201
            return self::$cache[$key] = $this->authorize($user, function ($user) use ($item) {
202
                return $user->can('manage-module', getModuleNameByModel(get_class($item)))
203
                || $user->permissions()->ofItem($item)->where('name', 'manage-item')->exists()
204
                || isUserGroupPermissionItemExists($user, $item, 'manage-item');
205
            });
206
        });
207
    }
208
}
209