middleware(function ($request, $next) { abort_unless(SystemAccess::canOpenSettings(), 403); return $next($request); }); } public function edit(Request $request) { $subjects = $this->subjects(); $subject = $request->string('subject')->toString() ?: array_key_first($subjects); abort_unless(isset($subjects[$subject]), 404); $settings = SidebarPermissions::settings(); $configured = in_array($subject, $settings['configured'] ?? [], true); return view('system_settings.sidebar.edit', [ 'navigation' => BusinessNavigation::all(), 'subjects' => $subjects, 'subject' => $subject, 'configured' => $configured, 'selected' => $configured ? (array) ($settings['subjects'][$subject] ?? []) : SidebarPermissions::allKeys(), ]); } public function update(Request $request) { $subjects = $this->subjects(); $subject = $request->input('subject'); $request->validate([ 'subject' => ['required', Rule::in(array_keys($subjects))], 'permissions' => ['nullable', 'array'], 'permissions.*' => ['string', Rule::in(SidebarPermissions::allKeys())], ]); $settings = SidebarPermissions::settings(); $settings['configured'] = array_values(array_unique(array_merge( (array) ($settings['configured'] ?? []), [$subject] ))); $settings['subjects'][$subject] = array_values(array_unique((array) $request->input('permissions', []))); setting()->set('system.sidebar_permissions', json_encode($settings, JSON_UNESCAPED_UNICODE)); setting()->save(); flash('保存成功,侧边栏权限已更新。')->success(); return redirect()->route('dashboard'); } private function subjects(): array { $labels = SystemAccess::roleLabels(); if (SystemAccess::isSuperAdmin()) { $subjects = [ 'role_super_admin' => '用户类型:' . $labels[SystemAccess::SUPER_ADMIN], 'role_admin' => '用户类型:' . $labels[SystemAccess::ADMIN], 'role_user' => '用户类型:' . $labels[SystemAccess::USER], ]; $users = User::query() ->whereHas('companies', fn ($company) => $company->where('companies.id', company_id())) ->whereHas('roles', fn ($roles) => $roles->whereIn('roles.name', [SystemAccess::SUPER_ADMIN, SystemAccess::ADMIN])) ->with('roles') ->orderBy('name') ->get(); } else { $subjects = ['role_user' => '用户类型:' . $labels[SystemAccess::USER]]; $users = User::query() ->whereHas('companies', fn ($company) => $company->where('companies.id', company_id())) ->whereHas('roles', fn ($roles) => $roles->where('roles.name', SystemAccess::USER)) ->orderBy('name') ->get(); } foreach ($users as $managedUser) { $role = SystemAccess::roleName($managedUser); $subjects['user_' . $managedUser->id] = '指定用户:' . $managedUser->name . ' - ' . ($labels[$role] ?? $role); } return $subjects; } }