|
@@ -71,11 +71,7 @@ class RoleController extends Controller
|
|
|
$slug = 'role_' . $user->id;
|
|
$slug = 'role_' . $user->id;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- $baseSlug = $slug;
|
|
|
|
|
- $counter = 2;
|
|
|
|
|
- while (Role::query()->where('slug', $slug)->exists()) {
|
|
|
|
|
- $slug = $baseSlug . '_' . $counter++;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ $slug = $this->uniqueRoleSlug($slug);
|
|
|
|
|
|
|
|
$role = DB::transaction(function () use ($validated, $slug, $user, $accessService) {
|
|
$role = DB::transaction(function () use ($validated, $slug, $user, $accessService) {
|
|
|
$role = Role::query()->create([
|
|
$role = Role::query()->create([
|
|
@@ -103,6 +99,36 @@ class RoleController extends Controller
|
|
|
->with('success', 'Роль создана из прав пользователя.');
|
|
->with('success', 'Роль создана из прав пользователя.');
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ public function copy(Role $role, AccessService $accessService): RedirectResponse
|
|
|
|
|
+ {
|
|
|
|
|
+ $copy = DB::transaction(function () use ($role, $accessService) {
|
|
|
|
|
+ $role->load('permissions');
|
|
|
|
|
+
|
|
|
|
|
+ $copy = Role::query()->create([
|
|
|
|
|
+ 'slug' => $this->uniqueRoleSlug($role->slug . '_copy'),
|
|
|
|
|
+ 'name' => 'Копия ' . $role->name,
|
|
|
|
|
+ 'description' => $role->description,
|
|
|
|
|
+ 'is_system' => false,
|
|
|
|
|
+ 'is_active' => true,
|
|
|
|
|
+ 'sort' => (int) ($role->sort ?? 100),
|
|
|
|
|
+ ]);
|
|
|
|
|
+
|
|
|
|
|
+ $sync = [];
|
|
|
|
|
+ foreach ($role->permissions as $permission) {
|
|
|
|
|
+ $sync[$permission->id] = ['effect' => $permission->pivot->effect];
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ $copy->permissions()->sync($sync);
|
|
|
|
|
+ $accessService->bumpCacheVersion();
|
|
|
|
|
+
|
|
|
|
|
+ return $copy;
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ return redirect()
|
|
|
|
|
+ ->route('admin.roles.edit', $copy)
|
|
|
|
|
+ ->with('success', 'Роль скопирована.');
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
public function edit(Role $role): View
|
|
public function edit(Role $role): View
|
|
|
{
|
|
{
|
|
|
$effects = $role->permissions()
|
|
$effects = $role->permissions()
|
|
@@ -217,4 +243,15 @@ class RoleController extends Controller
|
|
|
|
|
|
|
|
$role->permissions()->sync($sync);
|
|
$role->permissions()->sync($sync);
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ private function uniqueRoleSlug(string $slug): string
|
|
|
|
|
+ {
|
|
|
|
|
+ $baseSlug = $slug;
|
|
|
|
|
+ $counter = 2;
|
|
|
|
|
+ while (Role::query()->where('slug', $slug)->exists()) {
|
|
|
|
|
+ $slug = $baseSlug . '_' . $counter++;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return $slug;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|