Admin.php 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801
  1. <?php
  2. /**
  3. * 易优CMS
  4. * ============================================================================
  5. * 版权所有 2016-2028 海南赞赞网络科技有限公司,并保留所有权利。
  6. * 网站地址: http://www.eyoucms.com
  7. * ----------------------------------------------------------------------------
  8. * 如果商业用途务必到官方购买正版授权, 以免引起不必要的法律纠纷.
  9. * ============================================================================
  10. * Author: 小虎哥 <1105415366@qq.com>
  11. * Date: 2018-4-3
  12. */
  13. namespace app\admin\controller;
  14. use think\Page;
  15. use think\Verify;
  16. use think\Db;
  17. use think\db\Query;
  18. use think\Session;
  19. use app\admin\model\AuthRole;
  20. use app\admin\logic\AjaxLogic;
  21. class Admin extends Base {
  22. public function index()
  23. {
  24. $list = array();
  25. $keywords = input('keywords/s');
  26. $condition = array();
  27. if (!empty($keywords)) {
  28. $condition['a.user_name|a.true_name'] = array('LIKE', "%{$keywords}%");
  29. }
  30. /*权限控制 by 小虎哥*/
  31. $admin_info = session('admin_info');
  32. if (0 < intval($admin_info['role_id'])) {
  33. $condition['a.admin_id|a.parent_id'] = $admin_info['admin_id'];
  34. } else {
  35. if (!empty($admin_info['parent_id'])) {
  36. $condition['a.admin_id|a.parent_id'] = $admin_info['admin_id'];
  37. }
  38. }
  39. /*--end*/
  40. /**
  41. * 数据查询
  42. */
  43. $count = DB::name('admin')->alias('a')->where($condition)->count();// 查询满足要求的总记录数
  44. $Page = new Page($count, config('paginate.list_rows'));// 实例化分页类 传入总记录数和每页显示的记录数
  45. $list = DB::name('admin')->field('a.*, b.name AS role_name')
  46. ->alias('a')
  47. ->join('__AUTH_ROLE__ b', 'a.role_id = b.id', 'LEFT')
  48. ->where($condition)
  49. ->order('a.admin_id asc')
  50. ->limit($Page->firstRow.','.$Page->listRows)
  51. ->select();
  52. foreach ($list as $key => $val) {
  53. if (0 >= intval($val['role_id'])) {
  54. $val['role_name'] = !empty($val['parent_id']) ? '超级管理员' : '创始人';
  55. }
  56. $list[$key] = $val;
  57. }
  58. $show = $Page->show();// 分页显示输出
  59. $this->assign('page',$show);// 赋值分页输出
  60. $this->assign('list',$list);// 赋值数据集
  61. $this->assign('pager',$Page);// 赋值分页集
  62. /*第一次同步CMS用户的栏目ID到权限组里*/
  63. $this->syn_built_auth_role();
  64. /*--end*/
  65. return $this->fetch();
  66. }
  67. /*
  68. * 管理员登陆
  69. */
  70. public function login()
  71. {
  72. if (session('?admin_id') && session('admin_id') > 0) {
  73. $web_adminbasefile = tpCache('web.web_adminbasefile');
  74. $web_adminbasefile = !empty($web_adminbasefile) ? $web_adminbasefile : '/login.php';
  75. $this->success("您已登录", $web_adminbasefile);
  76. }
  77. // $gb_funcs = get_extension_funcs('gd');
  78. $is_vertify = 1; // 默认开启验证码
  79. $admin_login_captcha = config('captcha.admin_login');
  80. if (!function_exists('imagettftext') || empty($admin_login_captcha['is_on'])) {
  81. $is_vertify = 0; // 函数不存在,不符合开启的条件
  82. }
  83. $this->assign('is_vertify', $is_vertify);
  84. if (IS_POST) {
  85. $post = input('post.');
  86. if (!function_exists('session_start')) {
  87. $this->error('请联系空间商,开启php的session扩展!');
  88. }
  89. if (!testWriteAble(ROOT_PATH.config('session.path').'/')) {
  90. $this->error('请仔细检查以下问题:<br/>1、磁盘空间大小是否100%;<br/>2、站点目录权限是否为755;<br/>3、站点所有目录的权限,禁止用root:root ;<br/>4、如还没解决,请点击:<a href="http://www.eyoucms.com/wenda/6958.html" target="_blank">查看教程</a>');
  91. }
  92. if (1 == $is_vertify) {
  93. $verify = new Verify();
  94. if (!$verify->check(input('post.vertify'), "admin_login")) {
  95. $this->error('验证码错误');
  96. }
  97. }
  98. $is_clicap = 0; // 默认关闭文字验证码
  99. if (is_dir('./weapp/Clicap/')) {
  100. $ClicapRow = model('Weapp')->getWeappList('Clicap');
  101. if (!empty($ClicapRow['status']) && 1 == $ClicapRow['status']) {
  102. if (!empty($ClicapRow['data']) && $ClicapRow['data']['captcha']['admin_login']['is_on'] == 1) {
  103. $clicaptcha_info = input('post.clicaptcha-submit-info');
  104. $clicaptcha = new \weapp\Clicap\vendor\Clicaptcha;
  105. if (empty($clicaptcha_info) || !$clicaptcha->check($clicaptcha_info, false)) {
  106. $this->error('文字点击验证错误!');
  107. }
  108. }
  109. }
  110. }
  111. $user_name = input('post.user_name/s');
  112. $password = input('post.password/s');
  113. /*登录错误次数的限制*/
  114. /* $ststem_login_errnum_key = 'system_'.md5('login_errnum_'.$user_name);
  115. $ststem_login_errtime_key = 'system_'.md5('login_errtime_'.$user_name);
  116. $loginErrtotal = config('login_errtotal'); // 限定最大的登录错误次数
  117. $loginErrexpire = config('login_errexpire'); // 限定登录错误锁定有效时间
  118. $loginErrnum = tpCache('system.'.$ststem_login_errnum_key); // 登录错误次数
  119. $loginErrtime = tpCache('system.'.$ststem_login_errtime_key); // 最后一次登录错误时间
  120. if (intval($loginErrnum) >= intval($loginErrtotal)) {
  121. if (getTime() < $loginErrtime + $loginErrexpire) {
  122. $this->error("登录错误次数超限,用户名被锁定15分钟!");
  123. } else {
  124. // 重置登录错误次数
  125. $loginErrnum = 0;
  126. $loginErrtime = 0;
  127. tpCache('system', [$ststem_login_errnum_key => $loginErrnum]);
  128. tpCache('system', [$ststem_login_errtime_key => $loginErrtime]);
  129. }
  130. }*/
  131. /*end*/
  132. $condition['user_name'] = $user_name;
  133. $condition['password'] = $password;
  134. if (!empty($condition['user_name']) && !empty($condition['password'])) {
  135. $condition['password'] = func_encrypt($condition['password']);
  136. $admin_info = M('admin')->where($condition)->find();
  137. if (empty($admin_info)) {
  138. /*记录登录错误次数*/
  139. /*$login_num = intval($loginErrtotal) - intval($loginErrnum);
  140. $ststem_login_errnum = $loginErrnum + 1;
  141. tpCache('system', [$ststem_login_errnum_key=>$ststem_login_errnum]);
  142. tpCache('system', [$ststem_login_errtime_key=>getTime()]);
  143. $this->error("用户名或密码错误,您还可以尝试[{$login_num}]次!");*/
  144. $this->error("用户名或密码错误!");
  145. /*end*/
  146. } else {
  147. if ($admin_info['status'] == 0) {
  148. $this->error('用户名被禁用!');
  149. }
  150. $role_id = !empty($admin_info['role_id']) ? $admin_info['role_id'] : -1;
  151. $auth_role_info = array();
  152. if (!empty($admin_info['parent_id'])) {
  153. $role_name = '超级管理员';
  154. $isFounder = 0;
  155. } else {
  156. $role_name = '创始人';
  157. $isFounder = 1;
  158. }
  159. if (0 < intval($role_id)) {
  160. $auth_role_info = M('auth_role')
  161. ->field("a.*, a.name AS role_name")
  162. ->alias('a')
  163. ->where('a.id','eq', $role_id)
  164. ->find();
  165. if (!empty($auth_role_info)) {
  166. $auth_role_info['language'] = unserialize($auth_role_info['language']);
  167. $auth_role_info['cud'] = unserialize($auth_role_info['cud']);
  168. $auth_role_info['permission'] = unserialize($auth_role_info['permission']);
  169. $role_name = $auth_role_info['name'];
  170. }
  171. }
  172. $admin_info['auth_role_info'] = $auth_role_info;
  173. $admin_info['role_name'] = $role_name;
  174. $last_login_time = getTime();
  175. $last_login_ip = clientIP();
  176. $login_cnt = $admin_info['login_cnt'] + 1;
  177. M('admin')->where("admin_id = ".$admin_info['admin_id'])->save(array('last_login'=>$last_login_time, 'last_ip'=>$last_login_ip, 'login_cnt'=>$login_cnt, 'session_id'=>$this->session_id));
  178. $admin_info['last_login'] = $last_login_time;
  179. $admin_info['last_ip'] = $last_login_ip;
  180. // 头像
  181. empty($admin_info['head_pic']) && $admin_info['head_pic'] = get_head_pic($admin_info['head_pic'], true);
  182. $admin_info_new = $admin_info;
  183. /*过滤存储在session文件的敏感信息*/
  184. foreach (['user_name','true_name','password'] as $key => $val) {
  185. unset($admin_info_new[$val]);
  186. }
  187. /*--end*/
  188. session('admin_id',$admin_info['admin_id']);
  189. session('admin_info', $admin_info_new);
  190. session('admin_login_expire', getTime()); // 登录有效期
  191. /*检查密码复杂度*/
  192. $admin_login_pwdlevel = checkPasswordLevel($password);
  193. session('admin_login_pwdlevel', $admin_login_pwdlevel);
  194. /*end*/
  195. // 重置登录错误次数
  196. /*tpCache('system', [$ststem_login_errnum_key=>0]);
  197. tpCache('system', [$ststem_login_errtime_key=>0]);*/
  198. adminLog('后台登录');
  199. $url = session('from_url') ? session('from_url') : $this->request->baseFile();
  200. session('isset_author', null); // 内置勿动
  201. /*同步追加一个后台管理员到会员用户表*/
  202. $this->syn_users_login($admin_info, $isFounder);
  203. /* END */
  204. $this->success('登录成功', $url);
  205. }
  206. } else {
  207. $this->error('请填写用户名/密码');
  208. }
  209. }
  210. $ajaxLogic = new AjaxLogic;
  211. $ajaxLogic->login_handle();
  212. session('admin_info', null);
  213. return $this->fetch();
  214. }
  215. /**
  216. * 验证码获取
  217. */
  218. public function vertify()
  219. {
  220. /*验证码插件开关*/
  221. $admin_login_captcha = config('captcha.admin_login');
  222. $config = (!empty($admin_login_captcha['is_on']) && !empty($admin_login_captcha['config'])) ? $admin_login_captcha['config'] : config('captcha.default');
  223. /*--end*/
  224. ob_clean(); // 清空缓存,才能显示验证码
  225. $Verify = new Verify($config);
  226. $Verify->entry('admin_login');
  227. exit();
  228. }
  229. /**
  230. * 修改管理员密码
  231. * @return \think\mixed
  232. */
  233. public function admin_pwd()
  234. {
  235. $admin_id = input('admin_id/d',0);
  236. $oldPwd = input('old_pw/s');
  237. $newPwd = input('new_pw/s');
  238. $new2Pwd = input('new_pw2/s');
  239. if(!$admin_id){
  240. $admin_id = session('admin_id');
  241. }
  242. $info = M('admin')->where("admin_id", $admin_id)->find();
  243. $info['password'] = "";
  244. $this->assign('info',$info);
  245. if(IS_POST){
  246. //修改密码
  247. $enOldPwd = func_encrypt($oldPwd);
  248. $enNewPwd = func_encrypt($newPwd);
  249. $admin = M('admin')->where('admin_id' , $admin_id)->find();
  250. if(!$admin || $admin['password'] != $enOldPwd){
  251. exit(json_encode(array('status'=>-1,'msg'=>'旧密码不正确')));
  252. }else if($newPwd != $new2Pwd){
  253. exit(json_encode(array('status'=>-1,'msg'=>'两次密码不一致')));
  254. }else{
  255. $data = array(
  256. 'update_time' => getTime(),
  257. 'password' => $enNewPwd,
  258. );
  259. $row = M('admin')->where('admin_id' , $admin_id)->save($data);
  260. if($row){
  261. /*检查密码复杂度*/
  262. $admin_login_pwdlevel = checkPasswordLevel($newPwd);
  263. session('admin_login_pwdlevel', $admin_login_pwdlevel);
  264. /*end*/
  265. adminLog('修改管理员密码');
  266. exit(json_encode(array('status'=>1,'msg'=>'操作成功')));
  267. }else{
  268. exit(json_encode(array('status'=>-1,'msg'=>'操作失败')));
  269. }
  270. }
  271. }
  272. if (IS_AJAX) {
  273. return $this->fetch('admin/admin_pwd_ajax');
  274. } else {
  275. return $this->fetch('admin/admin_pwd');
  276. }
  277. }
  278. /**
  279. * 退出登陆
  280. */
  281. public function logout()
  282. {
  283. adminLog('安全退出');
  284. session_unset();
  285. // session_destroy();
  286. session::clear();
  287. cookie('admin-treeClicked', null); // 清除并恢复栏目列表的展开方式
  288. $this->success("安全退出", request()->baseFile());
  289. }
  290. /**
  291. * 新增管理员时,检测用户名是否与前台用户名相同
  292. */
  293. public function ajax_add_user_name()
  294. {
  295. if (IS_AJAX_POST) {
  296. $user_name = input('post.user_name/s');
  297. if (M('admin')->where("user_name", $user_name)->count()) {
  298. $this->error("此用户名已被注册,请更换!");
  299. }
  300. $row = Db::name('users')->field('users_id')->where([
  301. 'username' => $user_name,
  302. 'lang' => $this->admin_lang,
  303. ])->find();
  304. if (!empty($row)) {
  305. $this->error('已有相同会员名,将其转为系统账号?');
  306. } else {
  307. $this->success('会员名不存在,无需提示!');
  308. }
  309. }
  310. }
  311. /**
  312. * 新增管理员
  313. */
  314. public function admin_add()
  315. {
  316. $this->language_access(); // 多语言功能操作权限
  317. if (IS_POST) {
  318. $data = input('post.');
  319. if (0 < intval(session('admin_info.role_id'))) {
  320. $this->error("超级管理员才能操作!");
  321. }
  322. if (empty($data['password']) || empty($data['password2'])) {
  323. $this->error("密码不能为空!");
  324. }else if ($data['password'] != $data['password2']) {
  325. $this->error("两次密码输入不一致!");
  326. }
  327. $data['user_name'] = trim($data['user_name']);
  328. $data['password'] = func_encrypt($data['password']);
  329. $data['password2'] = func_encrypt($data['password2']);
  330. $data['role_id'] = intval($data['role_id']);
  331. $data['parent_id'] = session('admin_info.admin_id');
  332. $data['add_time'] = getTime();
  333. if (empty($data['pen_name'])) {
  334. $data['pen_name'] = $data['user_name'];
  335. }
  336. if (M('admin')->where("user_name", $data['user_name'])->count()) {
  337. $this->error("此用户名已被注册,请更换",url('Admin/admin_add'));
  338. } else {
  339. $admin_id = M('admin')->insertGetId($data);
  340. if ($admin_id) {
  341. adminLog('新增管理员:'.$data['user_name']);
  342. /*同步追加一个后台管理员到会员用户表*/
  343. try {
  344. $usersInfo = Db::name('users')->field('users_id')->where([
  345. 'username' => $data['user_name'],
  346. 'lang' => $this->admin_lang,
  347. ])->find();
  348. if (!empty($usersInfo)) {
  349. $r = Db::name('users')->where(['users_id'=>$usersInfo['users_id']])->update([
  350. 'nickname' => $data['user_name'],
  351. 'admin_id' => $admin_id,
  352. 'is_activation' => 1,
  353. 'is_lock' => 0,
  354. 'is_del' => 0,
  355. 'update_time' => getTime(),
  356. ]);
  357. !empty($r) && $users_id = $usersInfo['users_id'];
  358. } else {
  359. // 获取要添加的用户名
  360. $username = $this->GetUserName($data['user_name']);
  361. $AddData = [
  362. 'username' => $username,
  363. 'nickname' => $username,
  364. 'password' => func_encrypt(getTime()),
  365. 'level' => 1,
  366. 'lang' => $this->admin_lang,
  367. 'reg_time' => getTime(),
  368. 'add_time' => getTime(),
  369. 'head_pic' => ROOT_DIR . '/public/static/common/images/dfboy.png',
  370. 'register_place' => 1,
  371. 'admin_id' => $admin_id,
  372. ];
  373. $users_id = Db::name('users')->insertGetId($AddData);
  374. }
  375. if (!empty($users_id)) {
  376. Db::name('admin')->where(['admin_id'=>$admin_id])->update([
  377. 'syn_users_id' => $users_id,
  378. 'update_time' => getTime(),
  379. ]);
  380. }
  381. } catch (\Exception $e) {}
  382. /* END */
  383. $this->success("操作成功", url('Admin/index'));
  384. } else {
  385. $this->error("操作失败");
  386. }
  387. }
  388. }
  389. // 权限组
  390. $admin_role_list = model('AuthRole')->getRoleAll();
  391. $this->assign('admin_role_list', $admin_role_list);
  392. // 模块组
  393. $modules = getAllMenu();
  394. $this->assign('modules', $modules);
  395. // 权限集
  396. $auth_rules = get_auth_rule(['is_modules'=>1]);
  397. $auth_rule_list = group_same_key($auth_rules, 'menu_id');
  398. $this->assign('auth_rule_list', $auth_rule_list);
  399. // 栏目
  400. $arctype_data = $arctype_array = array();
  401. $arctype = M('arctype')->select();
  402. if(! empty($arctype)){
  403. foreach ($arctype as $item){
  404. if($item['parent_id'] <= 0){
  405. $arctype_data[] = $item;
  406. }
  407. $arctype_array[$item['parent_id']][] = $item;
  408. }
  409. }
  410. $this->assign('arctypes', $arctype_data);
  411. $this->assign('arctype_array', $arctype_array);
  412. // 插件
  413. $plugins = model('Weapp')->getList(['status'=>1]);
  414. $this->assign('plugins', $plugins);
  415. return $this->fetch();
  416. }
  417. /**
  418. * 编辑管理员
  419. */
  420. public function admin_edit()
  421. {
  422. if (IS_POST) {
  423. $data = input('post.');
  424. $id = $data['admin_id'];
  425. if ($id == session('admin_info.admin_id')) {
  426. unset($data['role_id']); // 不能修改自己的权限组
  427. } else if (0 < intval(session('admin_info.role_id')) && session('admin_info.admin_id') != $id) {
  428. $this->error('禁止更改别人的信息!');
  429. }
  430. $password = $data['password'];
  431. if (!empty($password) || !empty($data['password2'])) {
  432. if ($password != $data['password2']) {
  433. $this->error("两次密码输入不一致!");
  434. }
  435. }
  436. $user_name = $data['user_name'];
  437. if(empty($password)){
  438. unset($data['password']);
  439. }else{
  440. $data['password'] = func_encrypt($password);
  441. }
  442. unset($data['user_name']);
  443. if (empty($data['pen_name'])) {
  444. $data['pen_name'] = $user_name;
  445. }
  446. /*不允许修改自己的权限组*/
  447. if (isset($data['role_id'])) {
  448. if (0 < intval(session('admin_info.role_id')) && intval($data['role_id']) != session('admin_info.role_id')) {
  449. $data['role_id'] = session('admin_info.role_id');
  450. }
  451. }
  452. /*--end*/
  453. $data['update_time'] = getTime();
  454. $r = M('admin')->where('admin_id', $id)->save($data);
  455. if ($r) {
  456. /*检查密码复杂度*/
  457. if ($id == session('admin_info.admin_id')) {
  458. $admin_login_pwdlevel = checkPasswordLevel($password);
  459. session('admin_login_pwdlevel', $admin_login_pwdlevel);
  460. }
  461. /*end*/
  462. /*过滤存储在session文件的敏感信息*/
  463. if ($id == session('admin_info.admin_id')) {
  464. $admin_info = session('admin_info');
  465. $admin_info = array_merge($admin_info, $data);
  466. foreach (['user_name','true_name','password','password2'] as $key => $val) {
  467. unset($admin_info[$val]);
  468. }
  469. session('admin_info', $admin_info);
  470. }
  471. /*--end*/
  472. adminLog('编辑管理员:'.$user_name);
  473. $this->success("操作成功",url('Admin/index'));
  474. } else {
  475. $this->error("操作失败");
  476. }
  477. }
  478. $id = input('get.id/d', 0);
  479. $info = M('admin')->field('a.*')
  480. ->alias('a')
  481. ->where("a.admin_id", $id)->find();
  482. $info['password'] = "";
  483. $this->assign('info',$info);
  484. // 当前角色信息
  485. $admin_role_model = model('AuthRole');
  486. $role_info = $admin_role_model->getRole(array('id' => $info['role_id']));
  487. $this->assign('role_info', $role_info);
  488. // 权限组
  489. $admin_role_list = $admin_role_model->getRoleAll();
  490. $this->assign('admin_role_list', $admin_role_list);
  491. // 模块组
  492. $modules = getAllMenu();
  493. $this->assign('modules', $modules);
  494. // 权限集
  495. $auth_rules = get_auth_rule(['is_modules'=>1]);
  496. $auth_rule_list = group_same_key($auth_rules, 'menu_id');
  497. $this->assign('auth_rule_list', $auth_rule_list);
  498. // 栏目
  499. $arctype_data = $arctype_array = array();
  500. $arctype = M('arctype')->select();
  501. if(! empty($arctype)){
  502. foreach ($arctype as $item){
  503. if($item['parent_id'] <= 0){
  504. $arctype_data[] = $item;
  505. }
  506. $arctype_array[$item['parent_id']][] = $item;
  507. }
  508. }
  509. $this->assign('arctypes', $arctype_data);
  510. $this->assign('arctype_array', $arctype_array);
  511. // 插件
  512. $plugins = model('Weapp')->getList(['status'=>1]);
  513. $this->assign('plugins', $plugins);
  514. return $this->fetch();
  515. }
  516. /**
  517. * 删除管理员
  518. */
  519. public function admin_del()
  520. {
  521. $this->language_access(); // 多语言功能操作权限
  522. if (IS_POST) {
  523. $id_arr = input('del_id/a');
  524. $id_arr = eyIntval($id_arr);
  525. if (in_array(session('admin_id'), $id_arr)) {
  526. $this->error('禁止删除自己');
  527. }
  528. if (!empty($id_arr)) {
  529. if (0 < intval(session('admin_info.role_id')) || !empty($parent_id) ) {
  530. $count = M('admin')->where("admin_id in (".implode(',', $id_arr).") AND role_id = -1")
  531. ->count();
  532. if (!empty($count)) {
  533. $this->error('禁止删除超级管理员');
  534. }
  535. }
  536. $result = M('admin')->field('user_name')->where("admin_id",'IN',$id_arr)->select();
  537. $user_names = get_arr_column($result, 'user_name');
  538. $r = M('admin')->where("admin_id",'IN',$id_arr)->delete();
  539. if($r){
  540. adminLog('删除管理员:'.implode(',', $user_names));
  541. /*同步删除管理员关联的前台会员*/
  542. Db::name('users')->where(['admin_id'=>['IN', $id_arr],'lang'=>$this->admin_lang])->delete();
  543. /*end*/
  544. $this->success('删除成功');
  545. }else{
  546. $this->error('删除失败');
  547. }
  548. }else{
  549. $this->error('参数有误');
  550. }
  551. }
  552. $this->error('非法操作');
  553. }
  554. /*
  555. * 第一次同步CMS用户的栏目ID到权限组里
  556. * 默认赋予内置权限所有的内容栏目权限
  557. */
  558. private function syn_built_auth_role()
  559. {
  560. $authRole = new AuthRole;
  561. $roleRow = $authRole->getRoleAll(['built_in'=>1,'update_time'=>['elt',0]]);
  562. if (!empty($roleRow)) {
  563. $saveData = [];
  564. foreach ($roleRow as $key => $val) {
  565. $permission = $val['permission'];
  566. $arctype = M('arctype')->where('status',1)->column('id');
  567. if (!empty($arctype)) {
  568. $permission['arctype'] = $arctype;
  569. } else {
  570. unset($permission['arctype']);
  571. }
  572. $saveData[] = array(
  573. 'id' => $val['id'],
  574. 'permission' => $permission,
  575. 'update_time' => getTime(),
  576. );
  577. }
  578. $authRole->saveAll($saveData);
  579. }
  580. }
  581. /*
  582. * 设置admin表数据
  583. */
  584. public function ajax_setfield()
  585. {
  586. if (IS_POST) {
  587. $admin_id = session('admin_id');
  588. $field = input('field'); // 修改哪个字段
  589. $value = input('value', '', null); // 修改字段值
  590. if (!empty($admin_id)) {
  591. $r = M('admin')->where('admin_id',intval($admin_id))->save([
  592. $field=>$value,
  593. 'update_time'=>getTime(),
  594. ]); // 根据条件保存修改的数据
  595. if ($r) {
  596. /*更新存储在session里的信息*/
  597. $admin_info = session('admin_info');
  598. $admin_info[$field] = $value;
  599. session('admin_info', $admin_info);
  600. /*--end*/
  601. $this->success('操作成功');
  602. }
  603. }
  604. }
  605. $this->error('操作失败');
  606. }
  607. /*
  608. * 检测密码的复杂程度
  609. */
  610. public function ajax_checkPasswordLevel()
  611. {
  612. $password = input('post.password/s');
  613. if (IS_AJAX_POST && !empty($password)) {
  614. $pwdLevel = checkPasswordLevel($password);
  615. if (3 >= $pwdLevel) {
  616. $this->success("<font color='red'>当前密码复杂度为 {$pwdLevel} ,建议复杂度在 4~7 范围内,避免容易被暴力破解!</font>", null, ['pwdLevel'=>$pwdLevel]);
  617. } else {
  618. $this->success("<font color='green'>当前密码复杂度为 {$pwdLevel} ,在系统设定 4~7 安全范围内!</font>", null, ['pwdLevel'=>$pwdLevel]);
  619. }
  620. }
  621. $this->error('操作失败');
  622. }
  623. // 确保用户名唯一
  624. private function GetUserName($username = null)
  625. {
  626. $count = Db::name('users')->where('username',$username)->count();
  627. if (!empty($count)) {
  628. $username_new = $username.rand(1000,9999);
  629. $username = $this->GetUserName($username_new);
  630. }
  631. return $username;
  632. }
  633. /**
  634. * 同步追加一个后台管理员到会员用户表,并同步前台登录
  635. */
  636. private function syn_users_login($admin_info = [], $isFounder = 0)
  637. {
  638. $where_new = [
  639. 'admin_id' => $admin_info['admin_id'],
  640. 'lang' => $this->admin_lang,
  641. ];
  642. $users_id = Db::name('users')->where($where_new)->getField('users_id');
  643. try {
  644. if (empty($users_id) && empty($admin_info['syn_users_id'])) {
  645. $usersInfo = [];
  646. if (1 == $isFounder) {
  647. // 如果是创始人,强制将与会员名相同的改为管理员前台用户名
  648. $usersInfo = Db::name('users')->field('users_id')->where([
  649. 'username' => $admin_info['user_name'],
  650. 'lang' => $this->admin_lang,
  651. ])->find();
  652. }
  653. if (!empty($usersInfo)) {
  654. $r = Db::name('users')->where(['users_id'=>$usersInfo['users_id']])->update([
  655. 'nickname' => $admin_info['user_name'],
  656. 'admin_id' => $admin_info['admin_id'],
  657. 'is_activation' => 1,
  658. 'is_lock' => 0,
  659. 'is_del' => 0,
  660. 'update_time' => getTime(),
  661. 'last_login' => getTime(),
  662. ]);
  663. !empty($r) && $users_id = $usersInfo['users_id'];
  664. } else {
  665. // 获取要添加的用户名
  666. $username = $this->GetUserName($admin_info['user_name']);
  667. $AddData = [
  668. 'username' => $username,
  669. 'nickname' => $username,
  670. 'password' => func_encrypt(getTime()),
  671. 'level' => 1,
  672. 'lang' => $this->admin_lang,
  673. 'reg_time' => getTime(),
  674. 'head_pic' => ROOT_DIR . '/public/static/common/images/dfboy.png',
  675. 'add_time' => getTime(),
  676. 'last_login' => getTime(),
  677. 'register_place' => 1,
  678. 'admin_id' => $admin_info['admin_id'],
  679. ];
  680. $users_id = Db::name('users')->insertGetId($AddData);
  681. }
  682. if (!empty($users_id)) {
  683. Db::name('admin')->where(['admin_id'=>$admin_info['admin_id']])->update([
  684. 'syn_users_id' => $users_id,
  685. 'update_time' => getTime(),
  686. ]);
  687. $admin_info['syn_users_id'] = $users_id;
  688. session('admin_info', $admin_info);
  689. }
  690. } else if (!empty($users_id) && empty($admin_info['syn_users_id'])) {
  691. Db::name('admin')->where(['admin_id'=>$admin_info['admin_id']])->update([
  692. 'syn_users_id' => $users_id,
  693. 'update_time' => getTime(),
  694. ]);
  695. $admin_info['syn_users_id'] = $users_id;
  696. session('admin_info', $admin_info);
  697. }
  698. } catch (\Exception $e) {}
  699. // 加载前台session
  700. if (!empty($users_id)) {
  701. $users = M('users')->field('a.*,b.level_name,b.level_value,b.discount as level_discount')
  702. ->alias('a')
  703. ->join('__USERS_LEVEL__ b', 'a.level = b.level_id', 'LEFT')
  704. ->where([
  705. 'a.users_id' => $users_id,
  706. 'a.lang' => $this->admin_lang,
  707. 'a.is_activation' => 1,
  708. ])->find();
  709. if (!empty($users)) {
  710. session('users',$users);
  711. session('users_id',$users_id);
  712. Db::name('users')->where(['users_id'=>$users_id])->update([
  713. 'update_time' => getTime(),
  714. 'last_login' => getTime(),
  715. ]);
  716. }
  717. }
  718. }
  719. }