diff --git a/Server/application/superadmin/config/route.php b/Server/application/superadmin/config/route.php index 2a39e693..ece7bcaa 100644 --- a/Server/application/superadmin/config/route.php +++ b/Server/application/superadmin/config/route.php @@ -8,33 +8,33 @@ Route::post('auth/login', 'app\superadmin\controller\auth\AuthLoginController@in Route::group('', function () { // 菜单管理相关路由 Route::group('menu', function () { - Route::get('tree', 'app\\superadmin\\controller\\MenuController@getMenuTree'); - Route::get('list', 'app\\superadmin\\controller\\MenuController@getMenuList'); - Route::post('save', 'app\\superadmin\\controller\\MenuController@saveMenu'); - Route::delete('delete/:id', 'app\\superadmin\\controller\\MenuController@deleteMenu'); - Route::post('status', 'app\\superadmin\\controller\\MenuController@updateStatus'); - Route::get('toplevel', 'app\\superadmin\\controller\\MenuController@getTopLevelMenus'); + Route::get('tree', 'app\superadmin\controller\MenuController@getMenuTree'); + Route::get('list', 'app\superadmin\controller\MenuController@getMenuList'); + Route::post('save', 'app\superadmin\controller\MenuController@saveMenu'); + Route::delete('delete/:id', 'app\superadmin\controller\MenuController@deleteMenu'); + Route::post('status', 'app\superadmin\controller\MenuController@updateStatus'); + Route::get('toplevel', 'app\superadmin\controller\MenuController@getTopLevelMenus'); }); // 管理员相关路由 Route::group('administrator', function () { - Route::get('list', 'app\\superadmin\\controller\\administrator\\GetAdministratorListController@index'); - Route::get('detail/:id', 'app\\superadmin\\controller\\administrator\\GetAdministratorDetailController@index'); - Route::post('update', 'app\\superadmin\\controller\\administrator\\UpdateAdministratorController@index'); - Route::post('add', 'app\\superadmin\\controller\\AdministratorController@addAdmin'); - Route::post('delete', 'app\\superadmin\\controller\\AdministratorController@deleteAdmin'); + Route::get('list', 'app\superadmin\controller\administrator\GetAdministratorListController@index'); + Route::get('detail/:id', 'app\superadmin\controller\administrator\GetAdministratorDetailController@index'); + Route::post('update', 'app\superadmin\controller\administrator\UpdateAdministratorController@index'); + Route::post('add', 'app\superadmin\controller\administrator\AddAdministratorController@index'); + Route::post('delete', 'app\superadmin\controller\AdministratorController@deleteAdmin'); }); // 客户池管理路由 Route::group('trafficPool', function () { - Route::get('list', 'app\\superadmin\\controller\\TrafficPoolController@getList'); // 获取客户池列表 - Route::get('detail', 'app\\superadmin\\controller\\TrafficPoolController@getDetail'); // 获取客户详情 + Route::get('list', 'app\superadmin\controller\TrafficPoolController@getList'); // 获取客户池列表 + Route::get('detail', 'app\superadmin\controller\TrafficPoolController@getDetail'); // 获取客户详情 }); // 公司路由 Route::group('company', function () { - Route::post('create', 'app\\superadmin\\controller\\company\\CreateCompanyController@index'); - Route::get('list', 'app\\superadmin\\controller\\CompanyController@getList'); - Route::get('detail/:id', 'app\\superadmin\\controller\\CompanyController@getDetail'); + Route::post('create', 'app\superadmin\controller\company\CreateCompanyController@index'); + Route::get('list', 'app\superadmin\controller\CompanyController@getList'); + Route::get('detail/:id', 'app\superadmin\controller\CompanyController@getDetail'); }); -})->middleware(['app\\superadmin\\middleware\\AdminAuth']); \ No newline at end of file +})->middleware(['app\superadmin\middleware\AdminAuth']); \ No newline at end of file diff --git a/Server/application/superadmin/controller/AdministratorController.php b/Server/application/superadmin/controller/AdministratorController.php index 14ae5dc1..762ad699 100644 --- a/Server/application/superadmin/controller/AdministratorController.php +++ b/Server/application/superadmin/controller/AdministratorController.php @@ -250,7 +250,7 @@ class AdministratorController extends Controller $admin->deleteTime = 0; $admin->save(); - // 保存权限 + if (!empty($permissionIds)) { \app\superadmin\model\AdministratorPermissions::savePermissions($admin->id, $permissionIds); } diff --git a/Server/application/superadmin/controller/administrator/AddAdministratorController.php b/Server/application/superadmin/controller/administrator/AddAdministratorController.php new file mode 100644 index 00000000..8021320c --- /dev/null +++ b/Server/application/superadmin/controller/administrator/AddAdministratorController.php @@ -0,0 +1,151 @@ +where('deleteTime', 0)->count() > 0; + + if ($exists) { + throw new \Exception('账号已存在', 400); + } + } + + /** + * 数据验证 + * + * @param array $params + * @return $this + * @throws \Exception + */ + protected function dataValidate(array $params): self + { + $validate = Validate::make([ + 'account' => 'require|/\S+/', + 'name' => 'require|/\S+/', + 'password' => 'require|/\S+/', + 'permissionIds' => 'require|array', + ]); + + if (!$validate->check($params)) { + throw new \Exception($validate->getError(), 400); + } + + return $this; + } + + /** + * 判断是否有权限修改 + * + * @return $this + */ + protected function checkPermission(): self + { + if ($this->getAdminInfo('id') != 1) { + throw new \Exception('您没有权限添加管理员', 403); + } + + return $this; + } + + /** + * 保存管理员权限 + * + * @param int $adminId 管理员ID + * @param array $permissionIds 权限ID数组 + * @return bool + */ + protected function savePermissions(int $adminId, array $permissionIds) + { + $record = AdministratorPermissionsModel::where('adminId', $adminId)->find(); + + $permissionData = [ + 'ids' => is_array($permissionIds) ? implode(',', $permissionIds) : $permissionIds + ]; + + if ($record) { + return $record->save([ + 'permissions' => json_encode($permissionData), + ]); + } else { + return AdministratorPermissionsModel::create([ + 'adminId' => $adminId, + 'permissions' => json_encode($permissionData), + ]); + } + } + + /** + * 添加管理员信息 + * + * @param array $params + * @return AdministratorModel + * @throws \Exception + */ + protected function addAdministrator(array $params): AdministratorModel + { + $result = AdministratorModel::create(array_merge($params, ['password' => md5($params['password'])])); + + if (!$result) { + throw new \Exception('添加管理员失败', 401); + } + + return $result; + } + + /** + * 添加管理员 + * + * @return \think\response\Json + */ + public function index() + { + try { + $params = $this->request->only(['account', 'name', 'password', 'permissionIds']); + + $this->dataValidate($params); + $this->checkPermission()->chekAdminIsExist($params['account']); + + Db::startTrans(); + $admin = $this->addAdministrator($params); + + // 保存权限 + if (!empty($params['permissionIds'])) { + $this->savePermissions($admin->id, $params['permissionIds']); + } + + Db::commit(); + + return json([ + 'code' => 200, + 'msg' => '添加成功', + ]); + } catch (\Exception $e) { + Db::rollback(); + + return json([ + 'code' => $e->getCode(), + 'msg' => $e->getMessage() + ]); + } + } +} \ No newline at end of file diff --git a/Server/application/superadmin/controller/administrator/UpdateAdministratorController.php b/Server/application/superadmin/controller/administrator/UpdateAdministratorController.php index dd5571fc..71c56f2b 100644 --- a/Server/application/superadmin/controller/administrator/UpdateAdministratorController.php +++ b/Server/application/superadmin/controller/administrator/UpdateAdministratorController.php @@ -5,6 +5,7 @@ namespace app\superadmin\controller\administrator; use app\common\model\Administrator as AdministratorModel; use app\common\model\AdministratorPermissions as AdministratorPermissionsModel; use app\superadmin\controller\BaseController; +use think\Db; use think\Validate; /** @@ -80,8 +81,8 @@ class UpdateAdministratorController extends BaseController /** * 保存管理员权限 * - * @param int $adminId 管理员ID - * @param array $permissionIds 权限ID数组 + * @param int $adminId + * @param array $permissionIds * @return bool */ protected function savePermissions(int $adminId, array $permissionIds) @@ -97,7 +98,7 @@ class UpdateAdministratorController extends BaseController 'permissions' => json_encode($permissionData), ]); } else { - return self::create([ + return AdministratorPermissionsModel::create([ 'adminId' => $adminId, 'permissions' => json_encode($permissionData), ]); @@ -117,21 +118,29 @@ class UpdateAdministratorController extends BaseController // 被修改的管理员id $adminId = $params['id'] ?? 0; - $this->dataValidate($params)->checkPermission($adminId)->udpateAdministrator($params); + $this->dataValidate($params)->checkPermission($adminId); + + Db::startTrans(); + + $this->udpateAdministrator($params); // 如果当前是超级管理员(ID为1),并且修改的不是自己,则更新权限 if ($this->getAdminInfo('id') == 1 && $this->getAdminInfo('id') != $adminId - && !empty($permissionIds) + && !empty($params['permissionIds']) ) { - $this->savePermissions($adminId); + $this->savePermissions($adminId, $params['permissionIds']); } + Db::commit(); + return json([ 'code' => 200, 'msg' => '更新成功', ]); } catch (\Exception $e) { + Db::rollback(); + return json([ 'code' => $e->getCode(), 'msg' => $e->getMessage()