Files
2026-02-19 14:05:30 +08:00

268 lines
7.4 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
namespace App\Http\Controllers\Auth\Admin;
use App\Http\Controllers\Controller;
use App\Services\Auth\PermissionService;
use App\Services\Auth\ImportExportService;
use Illuminate\Http\Request;
class Permission extends Controller
{
protected $permissionService;
protected $importExportService;
public function __construct(
PermissionService $permissionService,
ImportExportService $importExportService
) {
$this->permissionService = $permissionService;
$this->importExportService = $importExportService;
}
/**
* 获取权限列表
*/
public function index(Request $request)
{
$params = $request->all();
$result = $this->permissionService->getList($params);
return response()->json([
'code' => 200,
'message' => 'success',
'data' => $result,
]);
}
/**
* 获取权限树
*/
public function tree(Request $request)
{
$params = $request->all();
$result = $this->permissionService->getTree($params);
return response()->json([
'code' => 200,
'message' => 'success',
'data' => $result,
]);
}
/**
* 获取菜单树
*/
public function menu(Request $request)
{
$result = $this->permissionService->getMenuTree();
return response()->json([
'code' => 200,
'message' => 'success',
'data' => $result,
]);
}
/**
* 获取权限详情
*/
public function show($id)
{
$result = $this->permissionService->getById($id);
return response()->json([
'code' => 200,
'message' => 'success',
'data' => $result,
]);
}
/**
* 创建权限
*/
public function store(Request $request)
{
$validated = $request->validate([
'title' => 'required|string|max:50',
'name' => 'required|string|max:100|unique:auth_permission,name',
'type' => 'required|in:menu,api,button',
'route' => 'nullable|string|max:200',
'component' => 'nullable|string|max:200',
'parent_id' => 'nullable|integer|min:0',
'sort' => 'nullable|integer|min:0',
'status' => 'nullable|integer|in:0,1',
'meta' => 'nullable|array',
], [], [
'parent_id.exists' => '父级权限不存在',
]);
// 额外验证:如果 parent_id 不为 0则必须存在
if (!empty($validated['parent_id']) && $validated['parent_id'] != 0) {
$parent = \App\Models\Auth\Permission::find($validated['parent_id']);
if (!$parent) {
return response()->json([
'code' => 422,
'message' => '验证失败',
'data' => [
'parent_id' => ['父级权限不存在']
]
], 422);
}
}
$result = $this->permissionService->create($validated);
return response()->json([
'code' => 200,
'message' => '创建成功',
'data' => ['id' => $result->id],
], 201);
}
/**
* 更新权限
*/
public function update(Request $request, $id)
{
$validated = $request->validate([
'title' => 'nullable|string|max:50',
'name' => 'nullable|string|max:100|unique:auth_permission,name,' . $id,
'type' => 'nullable|in:menu,api,button',
'route' => 'nullable|string|max:200',
'component' => 'nullable|string|max:200',
'parent_id' => 'nullable|integer|min:0',
'sort' => 'nullable|integer|min:0',
'status' => 'nullable|integer|in:0,1',
'meta' => 'nullable|array',
], [], [
'parent_id.exists' => '父级权限不存在',
]);
// 额外验证:如果 parent_id 不为 0则必须存在
if (isset($validated['parent_id']) && !empty($validated['parent_id']) && $validated['parent_id'] != 0) {
$parent = \App\Models\Auth\Permission::find($validated['parent_id']);
if (!$parent) {
return response()->json([
'code' => 422,
'message' => '验证失败',
'data' => [
'parent_id' => ['父级权限不存在']
]
], 422);
}
}
$result = $this->permissionService->update($id, $validated);
return response()->json([
'code' => 200,
'message' => '更新成功',
'data' => ['id' => $result->id],
]);
}
/**
* 删除权限
*/
public function destroy($id)
{
$this->permissionService->delete($id);
return response()->json([
'code' => 200,
'message' => '删除成功',
'data' => null,
]);
}
/**
* 批量删除权限
*/
public function batchDelete(Request $request)
{
$validated = $request->validate([
'ids' => 'required|array',
'ids.*' => 'integer',
]);
$count = $this->permissionService->batchDelete($validated['ids']);
return response()->json([
'code' => 200,
'message' => "成功删除 {$count} 条数据",
'data' => ['count' => $count],
]);
}
/**
* 批量更新权限状态
*/
public function batchUpdateStatus(Request $request)
{
$validated = $request->validate([
'ids' => 'required|array',
'ids.*' => 'integer',
'status' => 'required|integer|in:0,1',
]);
$count = $this->permissionService->batchUpdateStatus($validated['ids'], $validated['status']);
return response()->json([
'code' => 200,
'message' => "成功更新 {$count} 条数据",
'data' => ['count' => $count],
]);
}
/**
* 导出权限
*/
public function export(Request $request)
{
$validated = $request->validate([
'ids' => 'nullable|array',
'ids.*' => 'integer',
]);
$filename = $this->importExportService->exportPermissions($validated['ids'] ?? []);
$filePath = $this->importExportService->getExportFilePath($filename);
return response()->download($filePath, $filename)->deleteFileAfterSend();
}
/**
* 导入权限
*/
public function import(Request $request)
{
$validated = $request->validate([
'file' => 'required|file|mimes:xlsx,xls',
]);
$file = $request->file('file');
$realPath = $file->getRealPath();
$filename = $file->getClientOriginalName();
$result = $this->importExportService->importPermissions($filename, $realPath);
return response()->json([
'code' => 200,
'message' => "导入完成,成功 {$result['success_count']} 条,失败 {$result['error_count']}",
'data' => $result,
]);
}
/**
* 下载权限导入模板
*/
public function downloadTemplate()
{
$filename = $this->importExportService->downloadPermissionTemplate();
$filePath = $this->importExportService->getExportFilePath($filename);
return response()->download($filePath, $filename)->deleteFileAfterSend();
}
}