all(); $page = $params['page'] ?? 1; $pageSize = $params['page_size'] ?? 10; $offset = ($page - 1) * $pageSize; $query = DB::table('sys_permission') ->where('deleted', 0); // 搜索条件 if (!empty($params['permission_name'])) { $query->where('permission_name', 'like', '%' . $params['permission_name'] . '%'); } if (!empty($params['permission_code'])) { $query->where('permission_code', 'like', '%' . $params['permission_code'] . '%'); } if (isset($params['type']) && $params['type'] !== '') { $query->where('type', $params['type']); } if (isset($params['status']) && $params['status'] !== '') { $query->where('status', $params['status']); } $total = $query->count(); $list = $query ->orderBy('sort', 'asc') ->orderBy('id', 'asc') ->offset($offset) ->limit($pageSize) ->get(); return Rs::success([ 'list' => $list, 'total' => $total ]); } /** * 保存权限 */ public function Save(Request $request) { $data = $request->all(); // 验证必填字段 if (empty($data['permission_name'])) { return Rs::error('权限名称不能为空'); } if (empty($data['permission_code'])) { return Rs::error('权限编码不能为空'); } if (empty($data['type'])) { return Rs::error('权限类型不能为空'); } if (empty($data['parent_id'])) { $data['parent_id']=0; } // 检查权限编码是否已存在 $exists = DB::table('sys_permission') ->where('permission_code', $data['permission_code']) ->where('deleted', 0); if (isset($data['id']) && $data['id'] > 0) { $exists->where('id', '<>', $data['id']); } if ($exists->exists()) { return Rs::error('权限编码已存在'); } try { if (isset($data['id']) && $data['id'] > 0) { // 更新 $id = $data['id']; unset($data['id']); $data['update_time'] = date('Y-m-d H:i:s'); DB::table('sys_permission') ->where('id', $id) ->update($data); } else { // 新增 $data['create_time'] = date('Y-m-d H:i:s'); $data['update_time'] = date('Y-m-d H:i:s'); $data['deleted'] = 0; $id = DB::table('sys_permission')->insertGetId($data); } return Rs::success(['id' => $id]); } catch (\Exception $e) { return Rs::error('保存失败:' . $e->getMessage()); } } /** * 删除权限 */ public function Delete(Request $request) { $id = $request->input('id'); if (empty($id)) { return Rs::error('ID不能为空'); } try { // 检查是否有子权限 $hasChildren = DB::table('sys_permission') ->where('parent_id', $id) ->where('deleted', 0) ->exists(); if ($hasChildren) { return Rs::error('该权限下存在子权限,无法删除'); } // 软删除 DB::table('sys_permission') ->where('id', $id) ->update([ 'deleted' => 1, 'update_time' => date('Y-m-d H:i:s') ]); // 删除角色权限关联 DB::table('sys_role_permission') ->where('permission_id', $id) ->delete(); return Rs::success(); } catch (\Exception $e) { return Rs::error('删除失败:' . $e->getMessage()); } } /** * 获取权限树 */ public function getPermissionTree() { $permissions = DB::table('sys_permission') ->where('deleted', 0) ->orderBy('sort', 'asc') ->orderBy('id', 'asc') ->get(); $permissionTree = $this->buildPermissionTree($permissions); return Rs::success($permissionTree); } /** * 构建权限树 */ private function buildPermissionTree($permissions, $parentId = 0) { $tree = []; foreach ($permissions as $permission) { if ($permission->parent_id == $parentId) { $children = $this->buildPermissionTree($permissions, $permission->id); if (!empty($children)) { $permission->children = $children; } $tree[] = $permission; } } return $tree; } /** * 获取所有权限(不分页,用于角色绑定) */ public function getAllPermissions() { $permissions = DB::table('sys_permission') ->where('deleted', 0) ->orderBy('sort', 'asc') ->orderBy('id', 'asc') ->get(); return Rs::success($permissions); } }