} $data */ $data = validator($request->all(), [ 'role_slugs' => ['required', 'array'], 'role_slugs.*' => ['string', 'max:64', 'distinct', Rule::exists('admin_roles', 'slug')], ])->validate(); $slugs = array_values(array_unique($data['role_slugs'])); $siteId = AdminUser::defaultAdminSiteId(); $roleIds = DB::table('admin_roles') ->whereIn('slug', $slugs) ->pluck('id') ->all(); DB::transaction(function () use ($admin_user, $siteId, $roleIds): void { DB::table('admin_user_site_roles') ->where('admin_user_id', $admin_user->id) ->where('site_id', $siteId) ->delete(); $now = now(); foreach ($roleIds as $rid) { DB::table('admin_user_site_roles')->insert([ 'admin_user_id' => $admin_user->id, 'site_id' => $siteId, 'role_id' => (int) $rid, 'granted_at' => $now, ]); } }); $admin_user->load('roles'); return ApiResponse::success([ 'id' => (int) $admin_user->id, 'username' => $admin_user->username, 'nickname' => $admin_user->name, 'roles' => $admin_user->adminRoleSlugs(), 'direct_permissions' => $admin_user->directLegacyPermissionSlugs(), 'effective_permissions' => $admin_user->adminPermissionSlugs(), ]); } }