filled('group')) { $query->where('group_name', $request->group); } if ($request->filled('keyword')) { $query->where('name', 'like', "%{$request->keyword}%"); } $permissions = $query->orderBy('group_name')->orderBy('sort')->get(); // 按分组组织 $grouped = $permissions->groupBy('group_name')->map(fn($items) => $items->map(fn($p) => [ 'id' => $p->id, 'name' => $p->name, 'code' => $p->slug, 'description' => $p->description, ])); // 扁平列表 $list = $permissions->map(fn($p) => [ 'id' => $p->id, 'name' => $p->name, 'code' => $p->slug, 'group' => $p->group_name, 'description' => $p->description, ]); return response()->json([ 'code' => 200, 'data' => [ 'list' => $list, 'grouped' => $grouped, ], 'message' => 'success', ]); } /** * 创建权限 */ public function store(Request $request) { $validator = Validator::make($request->all(), [ 'name' => 'required|string|max:255', 'code' => 'required|string|max:100|unique:permissions,slug|regex:/^[a-z.]+$/', 'group' => 'required|string|max:100', 'description' => 'nullable|string|max:500', 'sort' => 'nullable|integer|min:0', ]); if ($validator->fails()) { return response()->json(['code' => 422, 'message' => '验证失败', 'errors' => $validator->errors()], 422); } $permission = Permission::create([ 'name' => $request->name, 'slug' => $request->code, 'group_name' => $request->group, 'description' => $request->description, 'sort' => $request->sort ?? 0, ]); return response()->json([ 'code' => 200, 'data' => $permission, 'message' => '权限创建成功', ]); } /** * 更新权限 */ public function update(Request $request, string $id) { $permission = Permission::find($id); if (!$permission) { return response()->json(['code' => 404, 'message' => '权限不存在'], 404); } $validator = Validator::make($request->all(), [ 'name' => 'sometimes|string|max:255', 'group' => 'sometimes|string|max:100', 'description' => 'nullable|string|max:500', 'sort' => 'nullable|integer|min:0', ]); if ($validator->fails()) { return response()->json(['code' => 422, 'message' => '验证失败', 'errors' => $validator->errors()], 422); } $permission->update($request->only(['name', 'group_name', 'description', 'sort'])); return response()->json([ 'code' => 200, 'data' => $permission, 'message' => '权限更新成功', ]); } /** * 删除权限 */ public function destroy(string $id) { $permission = Permission::find($id); if (!$permission) { return response()->json(['code' => 404, 'message' => '权限不存在'], 404); } $permission->roles()->detach(); $permission->delete(); return response()->json(['code' => 200, 'message' => '删除成功']); } /** * 获取所有分组 */ public function groups() { $groups = Permission::select('group_name') ->distinct() ->whereNotNull('group_name') ->orderBy('group_name') ->pluck('group_name'); return response()->json([ 'code' => 200, 'data' => $groups, 'message' => 'success', ]); } /** * 批量创建权限 */ public function batchStore(Request $request) { $validator = Validator::make($request->all(), [ 'permissions' => 'required|array', 'permissions.*.name' => 'required|string', 'permissions.*.code' => 'required|string', 'permissions.*.group' => 'required|string', ]); if ($validator->fails()) { return response()->json(['code' => 422, 'message' => '验证失败', 'errors' => $validator->errors()], 422); } $created = 0; foreach ($request->permissions as $perm) { if (!Permission::where('slug', $perm['code'])->exists()) { Permission::create([ 'name' => $perm['name'], 'slug' => $perm['code'], 'group_name' => $perm['group'], 'description' => $perm['description'] ?? null, 'sort' => $perm['sort'] ?? 0, ]); $created++; } } return response()->json([ 'code' => 200, 'data' => ['created' => $created], 'message' => "成功创建 {$created} 个权限", ]); } }