141 lines
4.2 KiB
PHP
141 lines
4.2 KiB
PHP
<?php
|
|
namespace app\admin\controller;
|
|
|
|
use support\Request;
|
|
use app\common\model\Role;
|
|
use Illuminate\Database\Capsule\Manager as DB;
|
|
|
|
class RoleController
|
|
{
|
|
public function list(Request $request)
|
|
{
|
|
$page = (int)$request->get('page', 1);
|
|
$limit = (int)$request->get('limit', 15);
|
|
|
|
$query = Role::with('permissions');
|
|
|
|
if ($name = $request->get('name')) {
|
|
$query->where('name', 'like', "%{$name}%");
|
|
}
|
|
|
|
$total = $query->count();
|
|
$list = $query->offset(($page - 1) * $limit)
|
|
->limit($limit)
|
|
->orderBy('id', 'desc')
|
|
->get();
|
|
|
|
return jsonResponse([
|
|
'total' => $total,
|
|
'list' => $list
|
|
]);
|
|
}
|
|
|
|
public function all(Request $request)
|
|
{
|
|
$roles = Role::all();
|
|
return jsonResponse($roles);
|
|
}
|
|
|
|
public function create(Request $request)
|
|
{
|
|
$name = trim($request->post('name', ''));
|
|
$code = trim($request->post('code', ''));
|
|
$description = trim($request->post('description', ''));
|
|
$permissionIds = $request->post('permission_ids', []);
|
|
|
|
if (!$name || !$code) {
|
|
return jsonResponse(null, '角色名称和编码必填', 400);
|
|
}
|
|
|
|
if (Role::where('name', $name)->exists()) {
|
|
return jsonResponse(null, '角色名称已存在', 400);
|
|
}
|
|
if (Role::where('code', $code)->exists()) {
|
|
return jsonResponse(null, '角色编码已存在', 400);
|
|
}
|
|
|
|
DB::beginTransaction();
|
|
try {
|
|
$role = Role::create([
|
|
'name' => $name,
|
|
'code' => $code,
|
|
'description' => $description,
|
|
]);
|
|
|
|
if (!empty($permissionIds)) {
|
|
$role->permissions()->sync($permissionIds);
|
|
}
|
|
DB::commit();
|
|
return jsonResponse(null, '创建成功');
|
|
} catch (\Exception $e) {
|
|
DB::rollBack();
|
|
return jsonResponse(null, '创建失败: ' . $e->getMessage(), 500);
|
|
}
|
|
}
|
|
|
|
public function update(Request $request)
|
|
{
|
|
$id = (int)$request->post('id');
|
|
$role = Role::find($id);
|
|
if (!$role) {
|
|
return jsonResponse(null, '角色不存在', 404);
|
|
}
|
|
|
|
$name = trim($request->post('name', ''));
|
|
if ($name && $name !== $role->name) {
|
|
if (Role::where('name', $name)->exists()) {
|
|
return jsonResponse(null, '角色名称已存在', 400);
|
|
}
|
|
$role->name = $name;
|
|
}
|
|
|
|
$code = trim($request->post('code', ''));
|
|
if ($code && $code !== $role->code) {
|
|
if (Role::where('code', $code)->exists()) {
|
|
return jsonResponse(null, '角色编码已存在', 400);
|
|
}
|
|
$role->code = $code;
|
|
}
|
|
|
|
if ($request->post('description') !== null) {
|
|
$role->description = trim($request->post('description'));
|
|
}
|
|
|
|
$permissionIds = $request->post('permission_ids');
|
|
|
|
DB::beginTransaction();
|
|
try {
|
|
$role->save();
|
|
if (is_array($permissionIds)) {
|
|
$role->permissions()->sync($permissionIds);
|
|
}
|
|
DB::commit();
|
|
return jsonResponse(null, '更新成功');
|
|
} catch (\Exception $e) {
|
|
DB::rollBack();
|
|
return jsonResponse(null, '更新失败: ' . $e->getMessage(), 500);
|
|
}
|
|
}
|
|
|
|
public function delete(Request $request)
|
|
{
|
|
$id = (int)$request->post('id');
|
|
$role = Role::find($id);
|
|
if (!$role) {
|
|
return jsonResponse(null, '角色不存在', 404);
|
|
}
|
|
|
|
DB::beginTransaction();
|
|
try {
|
|
$role->permissions()->detach();
|
|
$role->delete();
|
|
DB::table('admin_roles')->where('role_id', $id)->delete();
|
|
DB::commit();
|
|
return jsonResponse(null, '删除成功');
|
|
} catch (\Exception $e) {
|
|
DB::rollBack();
|
|
return jsonResponse(null, '删除失败: ' . $e->getMessage(), 500);
|
|
}
|
|
}
|
|
}
|