erp-backend/app/Http/Controllers/PermissionController.php
2026-04-01 17:07:04 +08:00

188 lines
5.4 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\Permission;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
class PermissionController extends Controller
{
/**
* 权限列表(按分组)
*/
public function index(Request $request)
{
$query = Permission::query();
if ($request->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} 个权限",
]);
}
}