Code Duplication    Length = 44-45 lines in 2 locations

src/Traits/HasPermissions.php 1 location

@@ 288-332 (lines=45) @@
285
     *
286
     * @return $this
287
     */
288
    public function givePermissionTo(...$permissions)
289
    {
290
        $permissions = collect($permissions)
291
            ->flatten()
292
            ->map(function ($permission) {
293
                if (empty($permission)) {
294
                    return false;
295
                }
296
297
                return $this->getStoredPermission($permission);
298
            })
299
            ->filter(function ($permission) {
300
                return $permission instanceof Permission;
301
            })
302
            ->each(function ($permission) {
303
                $this->ensureModelSharesGuard($permission);
304
            })
305
            ->map->id
306
            ->all();
307
308
        $model = $this->getModel();
309
310
        if ($model->exists) {
311
            $this->permissions()->sync($permissions, false);
312
            $model->load('permissions');
313
        } else {
314
            $class = \get_class($model);
315
316
            $class::saved(
317
                function ($object) use ($permissions, $model) {
318
                    static $modelLastFiredOn;
319
                    if ($modelLastFiredOn !== null && $modelLastFiredOn === $model) {
320
                        return;
321
                    }
322
                    $object->permissions()->sync($permissions, false);
323
                    $object->load('permissions');
324
                    $modelLastFiredOn = $object;
325
                }
326
            );
327
        }
328
329
        $this->forgetCachedPermissions();
330
331
        return $this;
332
    }
333
334
    /**
335
     * Remove all current permissions and set the given ones.

src/Traits/HasRoles.php 1 location

@@ 138-181 (lines=44) @@
135
     *
136
     * @return $this
137
     */
138
    public function assignRole(...$roles)
139
    {
140
        $roles = collect($roles)
141
            ->flatten()
142
            ->map(function ($role) {
143
                if (empty($role)) {
144
                    return false;
145
                }
146
147
                return $this->getStoredRole($role);
148
            })
149
            ->filter(function ($role) {
150
                return $role instanceof Role;
151
            })
152
            ->each(function ($role) {
153
                $this->ensureModelSharesGuard($role);
154
            })
155
            ->map->id
156
            ->all();
157
158
        $model = $this->getModel();
159
160
        if ($model->exists) {
161
            $this->roles()->sync($roles, false);
162
            $model->load('roles');
163
        } else {
164
            $class = \get_class($model);
165
166
            $class::saved(
167
                function ($object) use ($roles, $model) {
168
                    static $modelLastFiredOn;
169
                    if ($modelLastFiredOn !== null && $modelLastFiredOn === $model) {
170
                        return;
171
                    }
172
                    $object->roles()->sync($roles, false);
173
                    $object->load('roles');
174
                    $modelLastFiredOn = $object;
175
                });
176
        }
177
178
        $this->forgetCachedPermissions();
179
180
        return $this;
181
    }
182
183
    /**
184
     * Revoke the given role from the model.