103 lines
3.7 KiB
PHP
103 lines
3.7 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\SystemSettings;
|
|
|
|
use App\Models\Auth\User;
|
|
use App\Utilities\BusinessNavigation;
|
|
use App\Utilities\SidebarPermissions;
|
|
use App\Utilities\SystemAccess;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Routing\Controller;
|
|
use Illuminate\Validation\Rule;
|
|
|
|
class Sidebar extends Controller
|
|
{
|
|
public function __construct()
|
|
{
|
|
$this->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, SystemAccess::USER]))
|
|
->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;
|
|
}
|
|
}
|