AdminController.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: leo
  5. * Date: 2018/2/24
  6. * Time: 下午12:48
  7. */
  8. namespace backendApi\modules\v1\controllers;
  9. use backendApi\modules\v1\models\Admin;
  10. use backendApi\modules\v1\models\AdminCountry;
  11. use backendApi\modules\v1\models\AdminForm;
  12. use backendApi\modules\v1\models\AdminRoleForm;
  13. use common\helpers\Cache;
  14. use common\helpers\Date;
  15. use common\helpers\Form;
  16. use common\helpers\Log;
  17. use common\helpers\Tool;
  18. use common\models\Countries;
  19. use Yii;
  20. use backendApi\modules\v1\models\AdminRole;
  21. use backendApi\modules\v1\models\User;
  22. use yii\helpers\Json;
  23. class AdminController extends BaseController
  24. {
  25. public $modelClass = User::class;
  26. public function behaviors() {
  27. $behaviors = parent::behaviors();
  28. //$behaviors['contentNegotiator']['formats']['text/html'] = Response::FORMAT_JSON;
  29. return $behaviors;
  30. }
  31. /**
  32. * 管理员列表
  33. * @return mixed
  34. * @throws \yii\web\HttpException
  35. */
  36. public function actionIndex(){
  37. $filter = $this->filterCondition([
  38. 'ADMIN_NAME' => 'A.ADMIN_NAME',
  39. 'REAL_NAME' => 'A.REAL_NAME',
  40. 'REMARK' => 'A.REMARK',
  41. 'ROLE_NAME' => 'AR.ROLE_NAME',
  42. 'IS_ENABLE' => 'A.IS_ENABLE',
  43. 'LOGIN_NUMS' => 'A.LOGIN_NUMS',
  44. 'LAST_LOGIN_IP' => 'A.LAST_LOGIN_IP',
  45. 'LAST_LOGIN_AT' => 'A.LAST_LOGIN_AT',
  46. 'BIND_IP' => 'A.BIND_IP',
  47. 'CREATED_AT' => 'A.CREATED_AT',
  48. 'UPDATED_AT' => 'A.UPDATED_AT',
  49. 'CREATE_ADMIN_NAME' => 'ADMC.ADMIN_NAME',
  50. 'UPDATE_ADMIN_NAME' => 'ADMU.ADMIN_NAME',
  51. ]);
  52. $condition = $filter['condition'];
  53. $condition .= ' AND A.IS_DEL=0';
  54. $params = $filter['params'];
  55. $data = Admin::lists($condition, $params, [
  56. 'select' => 'A.*,AR.ROLE_NAME,ADMC.ADMIN_NAME CREATE_ADMIN_NAME,ADMU.ADMIN_NAME UPDATE_ADMIN_NAME',
  57. 'from' => Admin::tableName().' AS A',
  58. 'join' => [
  59. ['LEFT JOIN', AdminRole::tableName().' AS AR', 'A.ROLE_ID=AR.ID'],
  60. ['LEFT JOIN', Admin::tableName() . ' AS ADMC', 'ADMC.ID=A.CREATE_ADMIN'],
  61. ['LEFT JOIN', Admin::tableName() . ' AS ADMU', 'ADMU.ID=A.UPDATE_ADMIN'],
  62. ],
  63. 'orderBy' => 'A.CREATED_AT ASC',
  64. ]);
  65. // 遍历查询管理员关联国家,只返回国家CODE AS COUNTRY_CODE
  66. foreach ($data['list'] as &$value) {
  67. // 跳过超管
  68. if ($value['ROLE_ID'] == \Yii::$app->params['superAdminRoleId']) {
  69. $value['COUNTRY_CODE'] = '';
  70. continue;
  71. }
  72. $countryCode = AdminCountry::find()
  73. ->from(AdminCountry::tableName() . ' AS AC')
  74. ->join('INNER JOIN', Countries::tableName() . ' AS COU', 'AC.COUNTRY_ID=COU.ID')
  75. ->select('COU.CODE AS COUNTRY_CODE')
  76. ->where(['ADMIN_ID' => $value['ID']])
  77. ->asArray()
  78. ->column();
  79. $value['COUNTRY_CODE'] = implode(',', $countryCode);
  80. }
  81. return static::notice($data);
  82. }
  83. /**
  84. * 添加管理员
  85. * @return mixed
  86. * @throws \yii\base\Exception
  87. * @throws \yii\web\HttpException
  88. */
  89. public function actionAdd(){
  90. if(Yii::$app->request->isPost) {
  91. return parent::edit(AdminForm::class, Yii::t('ctx', 'AdminAddedSuccessfully'), null, null, null, function($formModel, $result){
  92. // 添加操作日志
  93. // Log::adminHandle('添加管理员:'.$result->ADMIN_NAME);
  94. });
  95. }
  96. // 获取全部管理员角色
  97. $adminRoles = Cache::getAdminRole();
  98. $admin = Admin::findOne(Yii::$app->user->id);
  99. $roleId = $admin->ROLE_ID;
  100. if ($roleId == \Yii::$app->params['superAdminRoleId']) {
  101. $countries = Countries::find()->asArray()->all();
  102. } else {
  103. // 关联国家
  104. $countries = Countries::find()
  105. ->select('COU.ID, COU.CODE, COU.NAME')
  106. ->from(['COU' => Countries::tableName()])
  107. ->join('INNER JOIN', AdminCountry::tableName() . ' AS ADL', 'countries.COUNTRY_ID = ADL.ID')
  108. ->where(['ADL.ADMIN_ID' => $admin->ID])
  109. ->asArray()
  110. ->all();
  111. }
  112. return static::notice(['adminRoles'=>$adminRoles, 'countries'=>$countries]);
  113. }
  114. /**
  115. * 添加管理员
  116. * @return mixed
  117. * @throws \yii\base\Exception
  118. * @throws \yii\web\HttpException
  119. */
  120. public function actionEdit(){
  121. $id = Yii::$app->request->get('id');
  122. if(Yii::$app->request->isPost){
  123. return parent::edit(AdminForm::class, Yii::t('ctx', 'AdminEditedSuccessfully'), null, null, null, function($formModel, $result){
  124. // 添加操作日志
  125. // Log::adminHandle('编辑管理员:'.$result->ADMIN_NAME);
  126. });
  127. }
  128. $oneData = Admin::findOneAsArray(['ID'=>$id]);
  129. // 获取全部管理员角色
  130. $adminRoles = Cache::getAdminRole();
  131. return static::notice(['oneData'=>['adminName'=>$oneData['ADMIN_NAME'],'realName'=>$oneData['REAL_NAME'],'remark'=>$oneData['REMARK'],'isEnable'=>$oneData['IS_ENABLE']?true:false,'isModifyPassword'=>$oneData['IS_MODIFY_PASSWORD']?true:false,'bindIp'=>$oneData['BIND_IP'],'roleId'=>$oneData['ROLE_ID']], 'adminRoles'=>$adminRoles]);
  132. }
  133. /**
  134. * 重置密码
  135. * @return mixed
  136. * @throws \yii\base\Exception
  137. * @throws \yii\web\HttpException
  138. */
  139. public function actionChangePassword(){
  140. $form = new AdminForm();
  141. $form->scenario = 'changePassword';
  142. if(Yii::$app->request->isPost && $form->load(Yii::$app->request->post(), '') && $result = $form->edit()){
  143. // Log::adminHandle('管理员'.$result->ADMIN_NAME.'重置密码');
  144. return static::notice(Yii::t('ctx', 'passwordChangeSucceeded')); // 重置密码成功
  145. } else {
  146. return static::notice(Form::formatErrorsForApi($form->getErrors()), 400);
  147. }
  148. }
  149. /**
  150. * 删除管理员
  151. * @return mixed
  152. * @throws \yii\db\Exception
  153. * @throws \yii\web\HttpException
  154. */
  155. public function actionAdminDelete(){
  156. $adminForm = new AdminForm();
  157. $result = static::delete(Admin::class, function ($selected) use ($adminForm) {
  158. $adminForm->beforeDelete($selected);
  159. // Log::adminHandle('删除审核修改会员状态信息');
  160. }, function ($selected) use ($adminForm) {
  161. $adminForm->delete($selected);
  162. // Log::adminHandle('删除审核修改会员状态信息');
  163. }, false);
  164. return $result;
  165. }
  166. /**
  167. * 获取获取全部管理员角色
  168. * @return mixed
  169. * @throws \yii\web\HttpException
  170. */
  171. public function actionRole(){
  172. $filter = $this->filterCondition([
  173. 'ROLE_NAME' => 'AR.ROLE_NAME',
  174. 'REMARK' => 'AR.REMARK',
  175. 'CREATED_AT' => 'AR.CREATED_AT',
  176. 'UPDATED_AT' => 'AR.UPDATED_AT',
  177. 'CREATE_ADMIN_NAME' => 'ADMC.ADMIN_NAME',
  178. 'UPDATE_ADMIN_NAME' => 'ADMU.ADMIN_NAME',
  179. ]);
  180. $condition = $filter['condition'];
  181. $params = $filter['params'];
  182. $data = AdminRole::lists($condition, $params, [
  183. 'select' => 'AR.ID,AR.ROLE_NAME,AR.REMARK,AR.CREATED_AT,AR.UPDATED_AT,AR.DONT_DEL,ADMC.ADMIN_NAME CREATE_ADMIN_NAME,ADMU.ADMIN_NAME UPDATE_ADMIN_NAME',
  184. 'from' => AdminRole::tableName().' AS AR',
  185. 'join' => [
  186. ['LEFT JOIN', Admin::tableName() . ' AS ADMC', 'ADMC.ID=AR.CREATE_ADMIN'],
  187. ['LEFT JOIN', Admin::tableName() . ' AS ADMU', 'ADMU.ID=AR.UPDATE_ADMIN'],
  188. ],
  189. 'orderBy' => 'AR.CREATED_AT ASC',
  190. ]);
  191. return static::notice($data);
  192. }
  193. /**
  194. * 添加管理组
  195. * @return mixed
  196. * @throws \yii\web\HttpException
  197. */
  198. public function actionRoleAdd(){
  199. if (Yii::$app->request->post()) {
  200. $formModel = new AdminRoleForm();
  201. $formModel->scenario = 'add';
  202. if ($formModel->load(Yii::$app->request->post(), '') && $formModel->add()) {
  203. return static::notice(Yii::t('ctx', 'successAddAdminRole'));
  204. } else {
  205. return static::notice(Form::formatErrorsForApi($formModel->getErrors()), 400);
  206. }
  207. }
  208. }
  209. /**
  210. * 编辑管理组
  211. * @return mixed
  212. * @throws \yii\web\HttpException
  213. */
  214. public function actionRoleEdit(){
  215. $id = Yii::$app->request->get('id');
  216. if (Yii::$app->request->isPost) {
  217. return parent::edit(AdminRoleForm::class, Yii::t('ctx', 'editAdminRoleSuccess'), 'edit', ['edit'], null, function ($form, $result) {
  218. Cache::updateAdminRole();
  219. });
  220. }
  221. // 获得当前会员的用户名等信息
  222. if (!$role = AdminRole::findOneAsArray('ID=:ID', [':ID' => $id], 'ROLE_NAME,REMARK')) {
  223. return static::notice(Yii::t('ctx', 'roleDoesNotExist'), 404);
  224. }
  225. return static::notice($role);
  226. }
  227. /**
  228. * 删除管理员角色
  229. * @return mixed
  230. * @throws \yii\db\Exception
  231. * @throws \yii\web\HttpException
  232. */
  233. public function actionRoleDelete() {
  234. $adminRoleForm = new AdminRoleForm();
  235. $result = static::delete(AdminRole::class, function ($selected) use ($adminRoleForm) {
  236. $adminRoleForm->beforeDelete($selected);
  237. // Log::adminHandle('删除审核修改会员状态信息');
  238. }, function ($selected) use ($adminRoleForm) {
  239. $adminRoleForm->delete($selected);
  240. // Log::adminHandle('删除审核修改会员状态信息');
  241. }, true);
  242. // 更新缓存
  243. Cache::updateAdminRole();
  244. return $result;
  245. }
  246. /**
  247. * 权限设置
  248. * @return mixed
  249. * @throws \yii\web\HttpException
  250. */
  251. public function actionRolePermission(){
  252. $id = Yii::$app->request->get('id');
  253. $oneAdminRole = AdminRole::findOne($id);
  254. if (Yii::$app->request->isPost) {
  255. return parent::edit(AdminRoleForm::class, Yii::t('ctx', 'successSetAdminRolePermissions'), 'permission', ['permission'], null, function ($form, $result) {
  256. Cache::updateAdminRole();
  257. });
  258. }
  259. // 获取全部权限(通过菜单)
  260. $menuArray = require Yii::getAlias('@backendApi/config/menu.php');
  261. $permissionArray = [];
  262. foreach($menuArray as $key=>$value){
  263. $tempPermission = [];
  264. if(isset($value['controller']) && $value['controller']){
  265. $tempPermission['mainPermission'] = [
  266. 'name' => $value['name'],
  267. 'path' => $value['controller'].'/*',
  268. ];
  269. if($value['action']){
  270. $isChecked = false;
  271. // 暂时先从文件中取内容
  272. $fPath = \Yii::getAlias('@common/runtime/permission/').$oneAdminRole['ID'];
  273. if(!file_exists($fPath)){
  274. $fPermission = '';
  275. } else {
  276. $fPermission = file_get_contents($fPath);
  277. }
  278. if($fPermission){
  279. if(in_array($value['controller'].'/'.$value['action'], Json::decode($fPermission))){
  280. $isChecked = true;
  281. }
  282. }
  283. $tempPermission['childPermission'][] = [
  284. 'name' => $value['name'],
  285. 'path' => $value['controller'].'/'.$value['action'],
  286. 'isChecked' => $isChecked,
  287. ];
  288. }
  289. if($value['child']){
  290. foreach($value['child'] as $child){
  291. if($child['action']){
  292. $isChildChecked = false;
  293. // 暂时先从文件中取内容
  294. $cPath = \Yii::getAlias('@common/runtime/permission/').$oneAdminRole['ID'];
  295. if(!file_exists($cPath)){
  296. $cPermission = '';
  297. } else {
  298. $cPermission = file_get_contents($cPath);
  299. }
  300. if($cPermission){
  301. //是否已选状态
  302. if(in_array($child['controller'].'/'.$child['action'], Json::decode($cPermission))){
  303. $isChildChecked = true;
  304. }
  305. }
  306. $tempPermission['childPermission'][] = [
  307. 'name' => $child['name'],
  308. 'path' => $child['controller'].'/'.$child['action'],
  309. 'isChecked' => $isChildChecked,
  310. ];
  311. }
  312. }
  313. }
  314. }
  315. $tempPermission['id'] = $key;
  316. $permissionArray[] = $tempPermission;
  317. }
  318. return static::notice($permissionArray);
  319. }
  320. /**
  321. * 列表字段权限设置
  322. */
  323. public function actionRoleColumn(){
  324. $id = Yii::$app->request->get('id');
  325. if (Yii::$app->request->isPost) {
  326. return parent::edit(AdminRoleForm::class, Yii::t('ctx', 'successSetAdminRoleListFieldPermissions'), 'columnPermission', ['columnPermission'], null, function ($form, $result) {
  327. Cache::updateAdminRole();
  328. });
  329. }
  330. $oneAdminRole = AdminRole::findOneAsArray('ID=:ID', [':ID'=>$id]);
  331. $columnPermission = isset($oneAdminRole['COLUMN_PERMISSION']) && is_resource($oneAdminRole['COLUMN_PERMISSION']) ? stream_get_contents($oneAdminRole['COLUMN_PERMISSION']) : null;
  332. $oneRoleColumns = $columnPermission ? Json::decode(base64_decode($columnPermission)) : null;
  333. // 获取全部可供选择的列表字段
  334. $allRoleColumns = AdminRole::getAllRoleColumn();
  335. foreach($allRoleColumns as $key => $roleColumns){
  336. if($oneRoleColumns && isset($oneRoleColumns[$roleColumns['listClass']])){
  337. foreach($roleColumns['columns'] as $k => $roleColumn){
  338. $allRoleColumns[$key]['columns'][$k]['isChecked'] = in_array($roleColumn['index'], $oneRoleColumns[$roleColumns['listClass']]);
  339. }
  340. } else {
  341. foreach($roleColumns['columns'] as $k => $roleColumn){
  342. $allRoleColumns[$key]['columns'][$k]['isChecked'] = false;
  343. }
  344. }
  345. }
  346. return $allRoleColumns;
  347. }
  348. /**
  349. * @return mixed
  350. * @throws \yii\base\Exception
  351. * @throws \yii\web\HttpException
  352. */
  353. public function actionChangeLanguage() {
  354. $form = new AdminForm();
  355. $form->scenario = 'changeLanguage';
  356. $data = Yii::$app->request->post();
  357. $adminName = $data['adminName'] ?? '';
  358. if ($adminName && Yii::$app->request->isPost && $form->load($data, '') && $form->edit()){
  359. return static::notice(Yii::t('ctx', 'successfully'));
  360. } else {
  361. return static::notice(Form::formatErrorsForApi($form->getErrors()), 400);
  362. }
  363. }
  364. }