Code Duplication    Length = 44-45 lines in 2 locations

src/Traits/HasRoles.php 1 location

@@ 97-140 (lines=44) @@
94
     *
95
     * @return $this
96
     */
97
    public function assignRole(...$roles)
98
    {
99
        $roles = collect($roles)
100
            ->flatten()
101
            ->map(function ($role) {
102
                if (empty($role)) {
103
                    return false;
104
                }
105
106
                return $this->getStoredRole($role);
107
            })
108
            ->filter(function ($role) {
109
                return $role instanceof Role;
110
            })
111
            ->each(function ($role) {
112
                $this->ensureModelSharesGuard($role);
113
            })
114
            ->map->id
115
            ->all();
116
117
        $model = $this->getModel();
118
119
        if ($model->exists) {
120
            $this->roles()->sync($roles, false);
121
            $model->load('roles');
122
        } else {
123
            $class = \get_class($model);
124
125
            $class::saved(
126
                function ($object) use ($roles, $model) {
127
                    static $modelLastFiredOn;
128
                    if ($modelLastFiredOn !== null && $modelLastFiredOn === $model) {
129
                        return;
130
                    }
131
                    $object->roles()->sync($roles, false);
132
                    $object->load('roles');
133
                    $modelLastFiredOn = $object;
134
                });
135
        }
136
137
        $this->forgetCachedPermissions();
138
139
        return $this;
140
    }
141
142
    /**
143
     * Revoke the given role from the model.

src/Traits/HasPermissions.php 1 location

@@ 304-348 (lines=45) @@
301
     *
302
     * @return $this
303
     */
304
    public function givePermissionTo(...$permissions)
305
    {
306
        $permissions = collect($permissions)
307
            ->flatten()
308
            ->map(function ($permission) {
309
                if (empty($permission)) {
310
                    return false;
311
                }
312
313
                return $this->getStoredPermission($permission);
314
            })
315
            ->filter(function ($permission) {
316
                return $permission instanceof Permission;
317
            })
318
            ->each(function ($permission) {
319
                $this->ensureModelSharesGuard($permission);
320
            })
321
            ->map->id
322
            ->all();
323
324
        $model = $this->getModel();
325
326
        if ($model->exists) {
327
            $this->permissions()->sync($permissions, false);
328
            $model->load('permissions');
329
        } else {
330
            $class = \get_class($model);
331
332
            $class::saved(
333
                function ($object) use ($permissions, $model) {
334
                    static $modelLastFiredOn;
335
                    if ($modelLastFiredOn !== null && $modelLastFiredOn === $model) {
336
                        return;
337
                    }
338
                    $object->permissions()->sync($permissions, false);
339
                    $object->load('permissions');
340
                    $modelLastFiredOn = $object;
341
                }
342
            );
343
        }
344
345
        $this->forgetCachedPermissions();
346
347
        return $this;
348
    }
349
350
    /**
351
     * Remove all current permissions and set the given ones.