You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
2.2 KiB
70 lines
2.2 KiB
<?php
|
|
|
|
namespace App\Http\Controllers\Api;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\RolePermission;
|
|
use Illuminate\Http\JsonResponse;
|
|
use Illuminate\Http\Request;
|
|
|
|
class RolePermissionController extends Controller
|
|
{
|
|
public function index(Request $request): JsonResponse
|
|
{
|
|
$rows = RolePermission::query()
|
|
->orderBy('sort')
|
|
->orderBy('id')
|
|
->get();
|
|
|
|
return response()->json($rows);
|
|
}
|
|
|
|
public function update(Request $request, RolePermission $rolePermission): JsonResponse
|
|
{
|
|
$this->ensureSuperAdmin($request);
|
|
|
|
$data = $request->validate([
|
|
'super_admin_allowed' => ['required', 'boolean'],
|
|
'venue_admin_allowed' => ['required', 'boolean'],
|
|
'scope' => ['nullable', 'string', 'max:255'],
|
|
'sort' => ['nullable', 'integer', 'min:0'],
|
|
]);
|
|
|
|
$rolePermission->fill($data)->save();
|
|
return response()->json($rolePermission);
|
|
}
|
|
|
|
public function batchUpdate(Request $request): JsonResponse
|
|
{
|
|
$this->ensureSuperAdmin($request);
|
|
$data = $request->validate([
|
|
'items' => ['required', 'array', 'min:1'],
|
|
'items.*.id' => ['required', 'integer', 'exists:role_permissions,id'],
|
|
'items.*.super_admin_allowed' => ['required', 'boolean'],
|
|
'items.*.venue_admin_allowed' => ['required', 'boolean'],
|
|
'items.*.scope' => ['nullable', 'string', 'max:255'],
|
|
'items.*.sort' => ['nullable', 'integer', 'min:0'],
|
|
]);
|
|
|
|
foreach ($data['items'] as $item) {
|
|
$row = RolePermission::find($item['id']);
|
|
if (!$row) {
|
|
continue;
|
|
}
|
|
$row->fill([
|
|
'super_admin_allowed' => $item['super_admin_allowed'],
|
|
'venue_admin_allowed' => $item['venue_admin_allowed'],
|
|
'scope' => $item['scope'] ?? $row->scope,
|
|
'sort' => $item['sort'] ?? $row->sort,
|
|
])->save();
|
|
}
|
|
|
|
return response()->json(['message' => '批量保存成功']);
|
|
}
|
|
|
|
private function ensureSuperAdmin(Request $request): void
|
|
{
|
|
abort_unless($request->user()?->isSuperAdmin(), 403, '仅超级管理员可操作');
|
|
}
|
|
}
|